/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * AddNodeResourceConfig request structure.
 * @class
 */
class AddNodeResourceConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Node type: Core, Task, and Router.
         * @type {string || null}
         */
        this.ResourceType = null;

        /**
         * Resource details.
         * @type {Resource || null}
         */
        this.ResourceConfig = null;

        /**
         * Payment mode.
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Whether default configuration applies, DEFAULT or BACKUP. If it is not specified, the default configuration does not apply.
         * @type {string || null}
         */
        this.IsDefault = null;

        /**
         * Region ID.
         * @type {number || null}
         */
        this.ZoneId = null;

        /**
         * When multiple specifications are added, details of the first specifications are in the ResourceConfig parameter, and those of the second to n-th are in the MultipleResourceConfig parameter.
         * @type {Array.<Resource> || null}
         */
        this.MultipleResourceConfig = null;

        /**
         * The type can be ComputeResource, EMR, or a default value. The default value is EMR.
         * @type {string || null}
         */
        this.ResourceBaseType = null;

        /**
         * Computing resource ID.
         * @type {string || null}
         */
        this.ComputeResourceId = null;

        /**
         * Hardware type.
         * @type {string || null}
         */
        this.HardwareResourceType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;

        if (params.ResourceConfig) {
            let obj = new Resource();
            obj.deserialize(params.ResourceConfig)
            this.ResourceConfig = obj;
        }
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.IsDefault = 'IsDefault' in params ? params.IsDefault : null;
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;

        if (params.MultipleResourceConfig) {
            this.MultipleResourceConfig = new Array();
            for (let z in params.MultipleResourceConfig) {
                let obj = new Resource();
                obj.deserialize(params.MultipleResourceConfig[z]);
                this.MultipleResourceConfig.push(obj);
            }
        }
        this.ResourceBaseType = 'ResourceBaseType' in params ? params.ResourceBaseType : null;
        this.ComputeResourceId = 'ComputeResourceId' in params ? params.ComputeResourceId : null;
        this.HardwareResourceType = 'HardwareResourceType' in params ? params.HardwareResourceType : null;

    }
}

/**
 * DescribeSparkApplications response structure.
 * @class
 */
class DescribeSparkApplicationsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of returns.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Spark application list.
         * @type {Array.<SparkApplicationsList> || null}
         */
        this.ResultList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.ResultList) {
            this.ResultList = new Array();
            for (let z in params.ResultList) {
                let obj = new SparkApplicationsList();
                obj.deserialize(params.ResultList[z]);
                this.ResultList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyResource response structure.
 * @class
 */
class ModifyResourceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Process traceId.
         * @type {string || null}
         */
        this.TraceId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TraceId = 'TraceId' in params ? params.TraceId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AZ configuration description.
 * @class
 */
class ZoneSetting extends  AbstractModel {
    constructor(){
        super();

        /**
         * Availability zone name
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * AZ VPC and subnet.
         * @type {VPCSettings || null}
         */
        this.VPCSettings = null;

        /**
         * Number of AZ nodes.
         * @type {number || null}
         */
        this.NodeNum = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Zone = 'Zone' in params ? params.Zone : null;

        if (params.VPCSettings) {
            let obj = new VPCSettings();
            obj.deserialize(params.VPCSettings)
            this.VPCSettings = obj;
        }
        this.NodeNum = 'NodeNum' in params ? params.NodeNum : null;

    }
}

/**
 * Other pod information.
 * @class
 */
class PodSpecInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * The specified information such as pod spec and source for scale-out with pod resources.
         * @type {PodNewSpec || null}
         */
        this.PodSpec = null;

        /**
         * The custom pod permission and parameter.
         * @type {PodNewParameter || null}
         */
        this.PodParameter = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.PodSpec) {
            let obj = new PodNewSpec();
            obj.deserialize(params.PodSpec)
            this.PodSpec = obj;
        }

        if (params.PodParameter) {
            let obj = new PodNewParameter();
            obj.deserialize(params.PodParameter)
            this.PodParameter = obj;
        }

    }
}

/**
 * DescribeHBaseTableOverview request structure.
 * @class
 */
class DescribeHBaseTableOverviewRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Pagination query number offset, starting from 0.	
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Page size for pagination query. The minimum value is 1, and the maximum value is 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Table name, supporting fuzzy matching
         * @type {string || null}
         */
        this.Table = null;

        /**
         * Field for sorting, with a default value
         * @type {string || null}
         */
        this.OrderField = null;

        /**
         * asc: Ascending; desc: Descending (default)
         * @type {string || null}
         */
        this.OrderType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Table = 'Table' in params ? params.Table : null;
        this.OrderField = 'OrderField' in params ? params.OrderField : null;
        this.OrderType = 'OrderType' in params ? params.OrderType : null;

    }
}

/**
 * ScaleOutInstance response structure.
 * @class
 */
class ScaleOutInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Order number.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.DealNames = null;

        /**
         * Client Token.
         * @type {string || null}
         */
        this.ClientToken = null;

        /**
         * Scale-out process ID.
         * @type {number || null}
         */
        this.FlowId = null;

        /**
         * Large order number.
         * @type {string || null}
         */
        this.BillId = null;

        /**
         * TraceId for scale-out.
         * @type {string || null}
         */
        this.TraceId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.DealNames = 'DealNames' in params ? params.DealNames : null;
        this.ClientToken = 'ClientToken' in params ? params.ClientToken : null;
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.BillId = 'BillId' in params ? params.BillId : null;
        this.TraceId = 'TraceId' in params ? params.TraceId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Brief user information in user management
 * @class
 */
class UserManagerUserBriefInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Username
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * The group to which the user belongs
         * @type {string || null}
         */
        this.UserGroup = null;

        /**
         * `Manager` represents an admin, and `NormalUser` represents a general user.
         * @type {string || null}
         */
        this.UserType = null;

        /**
         * User creation time.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Whether the corresponding Keytab file of the user is available for download. This parameter applies only to a Kerberos-enabled cluster.
         * @type {boolean || null}
         */
        this.SupportDownLoadKeyTab = null;

        /**
         * Download address of the keytab file.
         * @type {string || null}
         */
        this.DownLoadKeyTabUrl = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.UserGroup = 'UserGroup' in params ? params.UserGroup : null;
        this.UserType = 'UserType' in params ? params.UserType : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.SupportDownLoadKeyTab = 'SupportDownLoadKeyTab' in params ? params.SupportDownLoadKeyTab : null;
        this.DownLoadKeyTabUrl = 'DownLoadKeyTabUrl' in params ? params.DownLoadKeyTabUrl : null;

    }
}

/**
 * DescribeClusterFlowStatusDetail response structure.
 * @class
 */
class DescribeClusterFlowStatusDetailResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task step details

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<StageInfoDetail> || null}
         */
        this.StageDetails = null;

        /**
         * Task parameters.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<FlowParamsDesc> || null}
         */
        this.FlowDesc = null;

        /**
         * Task name.
         * @type {string || null}
         */
        this.FlowName = null;

        /**
         * Overall task flow progress.
Example: 0.8.
         * @type {number || null}
         */
        this.FlowTotalProgress = null;

        /**
         * Overall process status definition.
0: initializing.
1: running.
2: completed.
3: completed (with skipped steps).
-1: failed.
-3: blocked.
         * @type {number || null}
         */
        this.FlowTotalStatus = null;

        /**
         * Additional process information.
This parameter is returned when NeedExtraDetail is true.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<FlowExtraDetail> || null}
         */
        this.FlowExtraDetail = null;

        /**
         * Flow description.
         * @type {string || null}
         */
        this.FlowInfo = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.StageDetails) {
            this.StageDetails = new Array();
            for (let z in params.StageDetails) {
                let obj = new StageInfoDetail();
                obj.deserialize(params.StageDetails[z]);
                this.StageDetails.push(obj);
            }
        }

        if (params.FlowDesc) {
            this.FlowDesc = new Array();
            for (let z in params.FlowDesc) {
                let obj = new FlowParamsDesc();
                obj.deserialize(params.FlowDesc[z]);
                this.FlowDesc.push(obj);
            }
        }
        this.FlowName = 'FlowName' in params ? params.FlowName : null;
        this.FlowTotalProgress = 'FlowTotalProgress' in params ? params.FlowTotalProgress : null;
        this.FlowTotalStatus = 'FlowTotalStatus' in params ? params.FlowTotalStatus : null;

        if (params.FlowExtraDetail) {
            this.FlowExtraDetail = new Array();
            for (let z in params.FlowExtraDetail) {
                let obj = new FlowExtraDetail();
                obj.deserialize(params.FlowExtraDetail[z]);
                this.FlowExtraDetail.push(obj);
            }
        }
        this.FlowInfo = 'FlowInfo' in params ? params.FlowInfo : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Yarn resource scheduling history
 * @class
 */
class SchedulerTaskInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scheduler type
         * @type {string || null}
         */
        this.SchedulerName = null;

        /**
         * Operation type
         * @type {string || null}
         */
        this.OperatorName = null;

        /**
         * Start time.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * End time.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Status.
         * @type {number || null}
         */
        this.State = null;

        /**
         * Details.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<SchedulerTaskDetail> || null}
         */
        this.Details = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SchedulerName = 'SchedulerName' in params ? params.SchedulerName : null;
        this.OperatorName = 'OperatorName' in params ? params.OperatorName : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.State = 'State' in params ? params.State : null;

        if (params.Details) {
            this.Details = new Array();
            for (let z in params.Details) {
                let obj = new SchedulerTaskDetail();
                obj.deserialize(params.Details[z]);
                this.Details.push(obj);
            }
        }

    }
}

/**
 * Pod floating specification
 * @class
 */
class DynamicPodSpec extends  AbstractModel {
    constructor(){
        super();

        /**
         * Minimum number of CPUs
         * @type {number || null}
         */
        this.RequestCpu = null;

        /**
         * Maximum number of CPUs
         * @type {number || null}
         */
        this.LimitCpu = null;

        /**
         * Minimum memory in MB
         * @type {number || null}
         */
        this.RequestMemory = null;

        /**
         * Maximum memory in MB
         * @type {number || null}
         */
        this.LimitMemory = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestCpu = 'RequestCpu' in params ? params.RequestCpu : null;
        this.LimitCpu = 'LimitCpu' in params ? params.LimitCpu : null;
        this.RequestMemory = 'RequestMemory' in params ? params.RequestMemory : null;
        this.LimitMemory = 'LimitMemory' in params ? params.LimitMemory : null;

    }
}

/**
 * DescribeHDFSStorageInfo response structure.
 * @class
 */
class DescribeHDFSStorageInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Sampling time.
         * @type {number || null}
         */
        this.SampleTime = null;

        /**
         * Hdfs storage details.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<StorageSummaryDistribution> || null}
         */
        this.StorageSummaryDistribution = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SampleTime = 'SampleTime' in params ? params.SampleTime : null;

        if (params.StorageSummaryDistribution) {
            this.StorageSummaryDistribution = new Array();
            for (let z in params.StorageSummaryDistribution) {
                let obj = new StorageSummaryDistribution();
                obj.deserialize(params.StorageSummaryDistribution[z]);
                this.StorageSummaryDistribution.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyUserManagerPwd response structure.
 * @class
 */
class ModifyUserManagerPwdResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeHiveQueries request structure.
 * @class
 */
class DescribeHiveQueriesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The cluster ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The start time in seconds.
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * The end time in seconds. EndTime-StartTime should not exceed one day's duration, which is 86400 seconds.
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Starting offset for pagination. Start value: 0
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Page size. Valid range: [1,100]
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Execution status, for example, ERROR.
         * @type {Array.<string> || null}
         */
        this.State = null;

        /**
         * Time point earlier than the end time.
         * @type {number || null}
         */
        this.EndTimeGte = null;

        /**
         * Time point later than the end time.
         * @type {number || null}
         */
        this.EndTimeLte = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.State = 'State' in params ? params.State : null;
        this.EndTimeGte = 'EndTimeGte' in params ? params.EndTimeGte : null;
        this.EndTimeLte = 'EndTimeLte' in params ? params.EndTimeLte : null;

    }
}

/**
 * CreateInstance response structure.
 * @class
 */
class CreateInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Description of Pod `PVC` storage method
 * @class
 */
class PersistentVolumeContext extends  AbstractModel {
    constructor(){
        super();

        /**
         * Disk size in GB.
         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * Disk type, CLOUD_PREMIUM or CLOUD_SSD.
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Number of disks.
         * @type {number || null}
         */
        this.DiskNum = null;

        /**
         * Additional performance of cloud disks.
         * @type {number || null}
         */
        this.ExtraPerformance = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.DiskNum = 'DiskNum' in params ? params.DiskNum : null;
        this.ExtraPerformance = 'ExtraPerformance' in params ? params.ExtraPerformance : null;

    }
}

/**
 * CreateGroupsSTD response structure.
 * @class
 */
class CreateGroupsSTDResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Output result of each user group.
         * @type {Array.<ResultItem> || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new ResultItem();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Node specifications.
 * @class
 */
class DescribeNodeSpec extends  AbstractModel {
    constructor(){
        super();

        /**
         * Node type.
         * @type {string || null}
         */
        this.NodeType = null;

        /**
         * Node type name.
         * @type {string || null}
         */
        this.NodeName = null;

        /**
         * Types array.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<NodeSpecType> || null}
         */
        this.Types = null;

        /**
         * Cloud Managed Node (M Node) model specifications list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<NodeSpecType> || null}
         */
        this.CmnTypes = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NodeType = 'NodeType' in params ? params.NodeType : null;
        this.NodeName = 'NodeName' in params ? params.NodeName : null;

        if (params.Types) {
            this.Types = new Array();
            for (let z in params.Types) {
                let obj = new NodeSpecType();
                obj.deserialize(params.Types[z]);
                this.Types.push(obj);
            }
        }

        if (params.CmnTypes) {
            this.CmnTypes = new Array();
            for (let z in params.CmnTypes) {
                let obj = new NodeSpecType();
                obj.deserialize(params.CmnTypes[z]);
                this.CmnTypes.push(obj);
            }
        }

    }
}

/**
 * General parameters
 * @class
 */
class Arg extends  AbstractModel {
    constructor(){
        super();

        /**
         * key
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Value List

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.Values = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Key = 'Key' in params ? params.Key : null;
        this.Values = 'Values' in params ? params.Values : null;

    }
}

/**
 * Description of `HostPath` mounting method in the pod
 * @class
 */
class HostVolumeContext extends  AbstractModel {
    constructor(){
        super();

        /**
         * Directory for mounting the host in the pod. As the mount point of the host in the resource, a specified mount point corresponds to the host path and is used as the data storage directory in the pod.
         * @type {string || null}
         */
        this.VolumePath = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VolumePath = 'VolumePath' in params ? params.VolumePath : null;

    }
}

/**
 * DescribeServiceNodeInfos request structure.
 * @class
 */
class DescribeServiceNodeInfosRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Page number.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Page size.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Searching fields.
         * @type {string || null}
         */
        this.SearchText = null;

        /**
         * Configuration status. -2: configuration failed; -1: configuration expired; 1: synchronized; -99: all.
         * @type {number || null}
         */
        this.ConfStatus = null;

        /**
         * Filter criteria: Maintenance status

0 indicates all statuses.
1 indicates normal.
2 indicates the maintenance status.

         * @type {number || null}
         */
        this.MaintainStateId = null;

        /**
         * Filter criteria: Operation status

0 indicates all statuses.
1 indicates started.
2 indicates stopped.
         * @type {number || null}
         */
        this.OperatorStateId = null;

        /**
         * Filter criteria: health status.
0 indicates unavailable.
1 indicates good.
-2 indicates unknown.
-99 indicates all.
-3 indicates potential risks.
-4 indicates undetected.
         * @type {string || null}
         */
        this.HealthStateId = null;

        /**
         * Service component names (in all caps, for example, YARN).
         * @type {string || null}
         */
        this.ServiceName = null;

        /**
         * Node names: master, core, task, common, and router.
         * @type {string || null}
         */
        this.NodeTypeName = null;

        /**
         * Filter criteria: whether DN is in the maintenance status.
0 indicates all statuses.
1 indicates the maintenance status.
         * @type {number || null}
         */
        this.DataNodeMaintenanceId = null;

        /**
         * Searchable fields (currently supported SearchType: ipv4).
         * @type {Array.<SearchItem> || null}
         */
        this.SearchFields = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.SearchText = 'SearchText' in params ? params.SearchText : null;
        this.ConfStatus = 'ConfStatus' in params ? params.ConfStatus : null;
        this.MaintainStateId = 'MaintainStateId' in params ? params.MaintainStateId : null;
        this.OperatorStateId = 'OperatorStateId' in params ? params.OperatorStateId : null;
        this.HealthStateId = 'HealthStateId' in params ? params.HealthStateId : null;
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;
        this.NodeTypeName = 'NodeTypeName' in params ? params.NodeTypeName : null;
        this.DataNodeMaintenanceId = 'DataNodeMaintenanceId' in params ? params.DataNodeMaintenanceId : null;

        if (params.SearchFields) {
            this.SearchFields = new Array();
            for (let z in params.SearchFields) {
                let obj = new SearchItem();
                obj.deserialize(params.SearchFields[z]);
                this.SearchFields.push(obj);
            }
        }

    }
}

/**
 * Node disk information
 * @class
 */
class DiskSpecInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of disks.
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Valid values of the system disk type:
<li>CLOUD_SSD: Cloud SSD.</li>
<li>CLOUD_PREMIUM: Premium Cloud Disk.</li>
<li>CLOUD_BASIC: Cloud Disk.</li>
<li>LOCAL_BASIC: Local Disk.</li>
<li>LOCAL_SSD: Local SSD.</li>

Valid values of the data disk type.
<li>CLOUD_SSD: Cloud SSD.</li>
<li>CLOUD_PREMIUM: Premium Cloud Disk.</li>
<li>CLOUD_BASIC: Cloud Disk.</li>
<li>LOCAL_BASIC: Local Disk.</li>
<li>LOCAL_SSD: Local SSD.</li>
<li>CLOUD_HSSD: Enhanced SSD.</li>
<li>CLOUD_THROUGHPUT: Throughput HDD.</li>
<li>CLOUD_TSSD: Tremendous SSD.</li>
<li>CLOUD_BIGDATA: Big Data Cloud Disk.</li>
<li>CLOUD_HIGHIO: High IO Cloud Disk.</li>
<li>CLOUD_BSSD: Balanced SSD.</li>
<li>REMOTE_SSD: Remote SSD.</li>

         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Data capacity in GB.
         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * Additional performance.
         * @type {number || null}
         */
        this.ExtraPerformance = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Count = 'Count' in params ? params.Count : null;
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.ExtraPerformance = 'ExtraPerformance' in params ? params.ExtraPerformance : null;

    }
}

/**
 * Hive query details
 * @class
 */
class HiveQuery extends  AbstractModel {
    constructor(){
        super();

        /**
         * Query statement.
         * @type {string || null}
         */
        this.Statement = null;

        /**
         * Execution duration.
         * @type {string || null}
         */
        this.Duration = null;

        /**
         * Start time in milliseconds.
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * End time in milliseconds.
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Status.
         * @type {string || null}
         */
        this.State = null;

        /**
         * User.
         * @type {string || null}
         */
        this.User = null;

        /**
         * AppId List
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.JobIds = null;

        /**
         * Execution engine.
         * @type {string || null}
         */
        this.ExecutionEngine = null;

        /**
         * Query ID.
         * @type {string || null}
         */
        this.Id = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Statement = 'Statement' in params ? params.Statement : null;
        this.Duration = 'Duration' in params ? params.Duration : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.State = 'State' in params ? params.State : null;
        this.User = 'User' in params ? params.User : null;
        this.JobIds = 'JobIds' in params ? params.JobIds : null;
        this.ExecutionEngine = 'ExecutionEngine' in params ? params.ExecutionEngine : null;
        this.Id = 'Id' in params ? params.Id : null;

    }
}

/**
 * Global configurations of the fair scheduler under Resource Scheduling.
 * @class
 */
class FairGlobalConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * Corresponds to <p>Program Upper Limit</p> of the page.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.UserMaxAppsDefault = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserMaxAppsDefault = 'UserMaxAppsDefault' in params ? params.UserMaxAppsDefault : null;

    }
}

/**
 * Node model list.
 * @class
 */
class NodeSpecFamily extends  AbstractModel {
    constructor(){
        super();

        /**
         * Model.
         * @type {string || null}
         */
        this.InstanceFamily = null;

        /**
         * Model name.
         * @type {string || null}
         */
        this.FamilyName = null;

        /**
         * Order.
         * @type {number || null}
         */
        this.Order = null;

        /**
         * InstanceType List.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<NodeSpecInstanceType> || null}
         */
        this.InstanceTypes = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceFamily = 'InstanceFamily' in params ? params.InstanceFamily : null;
        this.FamilyName = 'FamilyName' in params ? params.FamilyName : null;
        this.Order = 'Order' in params ? params.Order : null;

        if (params.InstanceTypes) {
            this.InstanceTypes = new Array();
            for (let z in params.InstanceTypes) {
                let obj = new NodeSpecInstanceType();
                obj.deserialize(params.InstanceTypes[z]);
                this.InstanceTypes.push(obj);
            }
        }

    }
}

/**
 * Key-value pair, primarily used for filtering
 * @class
 */
class KeyValue extends  AbstractModel {
    constructor(){
        super();

        /**
         * Key.
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Value.
         * @type {string || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * DescribeServiceNodeInfos response structure.
 * @class
 */
class DescribeServiceNodeInfosResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number.
         * @type {number || null}
         */
        this.TotalCnt = null;

        /**
         * Process information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ServiceNodeDetailInfo> || null}
         */
        this.ServiceNodeList = null;

        /**
         * Alias serialization of all nodes in the cluster.
         * @type {string || null}
         */
        this.AliasInfo = null;

        /**
         * Supported FlagNode list

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.SupportNodeFlagFilterList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCnt = 'TotalCnt' in params ? params.TotalCnt : null;

        if (params.ServiceNodeList) {
            this.ServiceNodeList = new Array();
            for (let z in params.ServiceNodeList) {
                let obj = new ServiceNodeDetailInfo();
                obj.deserialize(params.ServiceNodeList[z]);
                this.ServiceNodeList.push(obj);
            }
        }
        this.AliasInfo = 'AliasInfo' in params ? params.AliasInfo : null;
        this.SupportNodeFlagFilterList = 'SupportNodeFlagFilterList' in params ? params.SupportNodeFlagFilterList : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * EMR product configuration.
 * @class
 */
class EmrProductConfigDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Software information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.SoftInfo = null;

        /**
         * Number of Master nodes.
         * @type {number || null}
         */
        this.MasterNodeSize = null;

        /**
         * Number of Core nodes.
         * @type {number || null}
         */
        this.CoreNodeSize = null;

        /**
         * Number of Task nodes.
         * @type {number || null}
         */
        this.TaskNodeSize = null;

        /**
         * Number of Common nodes.
         * @type {number || null}
         */
        this.ComNodeSize = null;

        /**
         * Primary node resources

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ResourceDetail || null}
         */
        this.MasterResource = null;

        /**
         * Core node resources

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ResourceDetail || null}
         */
        this.CoreResource = null;

        /**
         * Task node resources

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ResourceDetail || null}
         */
        this.TaskResource = null;

        /**
         * Common node resources

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ResourceDetail || null}
         */
        this.ComResource = null;

        /**
         * Whether to use COS.
         * @type {boolean || null}
         */
        this.OnCos = null;

        /**
         * Charge type.
         * @type {number || null}
         */
        this.ChargeType = null;

        /**
         * Number of Router nodes.
         * @type {number || null}
         */
        this.RouterNodeSize = null;

        /**
         * Whether HA is supported.
         * @type {boolean || null}
         */
        this.SupportHA = null;

        /**
         * Whether security mode is supported.
         * @type {boolean || null}
         */
        this.SecurityOn = null;

        /**
         * Security group name.
         * @type {string || null}
         */
        this.SecurityGroup = null;

        /**
         * Whether to enable CBS encryption.
         * @type {number || null}
         */
        this.CbsEncrypt = null;

        /**
         * Custom application role.
         * @type {string || null}
         */
        this.ApplicationRole = null;

        /**
         * Security group.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.SecurityGroups = null;

        /**
         * SSH key ID.
         * @type {string || null}
         */
        this.PublicKeyId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SoftInfo = 'SoftInfo' in params ? params.SoftInfo : null;
        this.MasterNodeSize = 'MasterNodeSize' in params ? params.MasterNodeSize : null;
        this.CoreNodeSize = 'CoreNodeSize' in params ? params.CoreNodeSize : null;
        this.TaskNodeSize = 'TaskNodeSize' in params ? params.TaskNodeSize : null;
        this.ComNodeSize = 'ComNodeSize' in params ? params.ComNodeSize : null;

        if (params.MasterResource) {
            let obj = new ResourceDetail();
            obj.deserialize(params.MasterResource)
            this.MasterResource = obj;
        }

        if (params.CoreResource) {
            let obj = new ResourceDetail();
            obj.deserialize(params.CoreResource)
            this.CoreResource = obj;
        }

        if (params.TaskResource) {
            let obj = new ResourceDetail();
            obj.deserialize(params.TaskResource)
            this.TaskResource = obj;
        }

        if (params.ComResource) {
            let obj = new ResourceDetail();
            obj.deserialize(params.ComResource)
            this.ComResource = obj;
        }
        this.OnCos = 'OnCos' in params ? params.OnCos : null;
        this.ChargeType = 'ChargeType' in params ? params.ChargeType : null;
        this.RouterNodeSize = 'RouterNodeSize' in params ? params.RouterNodeSize : null;
        this.SupportHA = 'SupportHA' in params ? params.SupportHA : null;
        this.SecurityOn = 'SecurityOn' in params ? params.SecurityOn : null;
        this.SecurityGroup = 'SecurityGroup' in params ? params.SecurityGroup : null;
        this.CbsEncrypt = 'CbsEncrypt' in params ? params.CbsEncrypt : null;
        this.ApplicationRole = 'ApplicationRole' in params ? params.ApplicationRole : null;
        this.SecurityGroups = 'SecurityGroups' in params ? params.SecurityGroups : null;
        this.PublicKeyId = 'PublicKeyId' in params ? params.PublicKeyId : null;

    }
}

/**
 * DescribeInstances response structure.
 * @class
 */
class DescribeInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of eligible instances.
         * @type {number || null}
         */
        this.TotalCnt = null;

        /**
         * List of EMR instance details.
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ClusterInstancesInfo> || null}
         */
        this.ClusterList = null;

        /**
         * List of tag keys associated to an instance.
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.TagKeys = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCnt = 'TotalCnt' in params ? params.TotalCnt : null;

        if (params.ClusterList) {
            this.ClusterList = new Array();
            for (let z in params.ClusterList) {
                let obj = new ClusterInstancesInfo();
                obj.deserialize(params.ClusterList[z]);
                this.ClusterList.push(obj);
            }
        }
        this.TagKeys = 'TagKeys' in params ? params.TagKeys : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeTrinoQueryInfo response structure.
 * @class
 */
class DescribeTrinoQueryInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number, which is used for pagination query.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Query result array.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<TrinoQueryInfo> || null}
         */
        this.QueryInfoList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.QueryInfoList) {
            this.QueryInfoList = new Array();
            for (let z in params.QueryInfoList) {
                let obj = new TrinoQueryInfo();
                obj.deserialize(params.QueryInfoList[z]);
                this.QueryInfoList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Inquiry results
 * @class
 */
class PriceResult extends  AbstractModel {
    constructor(){
        super();

        /**
         * Original price.
         * @type {number || null}
         */
        this.OriginalCost = null;

        /**
         * Discount price.
         * @type {number || null}
         */
        this.DiscountCost = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.OriginalCost = 'OriginalCost' in params ? params.OriginalCost : null;
        this.DiscountCost = 'DiscountCost' in params ? params.DiscountCost : null;

    }
}

/**
 * Trino query information.
 * @class
 */
class TrinoQueryInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * catalog
         * @type {string || null}
         */
        this.Catalog = null;

        /**
         * IP address used for submission.
         * @type {string || null}
         */
        this.ClientIpAddr = null;

        /**
         * Number of segments.
         * @type {string || null}
         */
        this.CompletedSplits = null;

        /**
         * CPU time.
         * @type {number || null}
         */
        this.CpuTime = null;

        /**
         * Cumulative memory.
         * @type {number || null}
         */
        this.CumulativeMemory = null;

        /**
         * Execution duration.
         * @type {number || null}
         */
        this.DurationMillis = null;

        /**
         * End time (seconds).
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Query ID.
         * @type {string || null}
         */
        this.Id = null;

        /**
         * Internal transmission volume.
         * @type {number || null}
         */
        this.InternalNetworkBytes = null;

        /**
         * Number of output bytes.
         * @type {number || null}
         */
        this.OutputBytes = null;

        /**
         * Peak memory.
         * @type {number || null}
         */
        this.PeakUserMemoryBytes = null;

        /**
         * Physical input volume.
         * @type {number || null}
         */
        this.PhysicalInputBytes = null;

        /**
         * Processed input volume.
         * @type {number || null}
         */
        this.ProcessedInputBytes = null;

        /**
         * Compilation duration.
         * @type {number || null}
         */
        this.SqlCompileTime = null;

        /**
         * Start time (seconds).
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * Execution status.
         * @type {string || null}
         */
        this.State = null;

        /**
         * Execution statement.
         * @type {string || null}
         */
        this.Statement = null;

        /**
         * User who submits requests.
         * @type {string || null}
         */
        this.User = null;

        /**
         * Number of bytes written.
         * @type {number || null}
         */
        this.WrittenBytes = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Catalog = 'Catalog' in params ? params.Catalog : null;
        this.ClientIpAddr = 'ClientIpAddr' in params ? params.ClientIpAddr : null;
        this.CompletedSplits = 'CompletedSplits' in params ? params.CompletedSplits : null;
        this.CpuTime = 'CpuTime' in params ? params.CpuTime : null;
        this.CumulativeMemory = 'CumulativeMemory' in params ? params.CumulativeMemory : null;
        this.DurationMillis = 'DurationMillis' in params ? params.DurationMillis : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Id = 'Id' in params ? params.Id : null;
        this.InternalNetworkBytes = 'InternalNetworkBytes' in params ? params.InternalNetworkBytes : null;
        this.OutputBytes = 'OutputBytes' in params ? params.OutputBytes : null;
        this.PeakUserMemoryBytes = 'PeakUserMemoryBytes' in params ? params.PeakUserMemoryBytes : null;
        this.PhysicalInputBytes = 'PhysicalInputBytes' in params ? params.PhysicalInputBytes : null;
        this.ProcessedInputBytes = 'ProcessedInputBytes' in params ? params.ProcessedInputBytes : null;
        this.SqlCompileTime = 'SqlCompileTime' in params ? params.SqlCompileTime : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.State = 'State' in params ? params.State : null;
        this.Statement = 'Statement' in params ? params.Statement : null;
        this.User = 'User' in params ? params.User : null;
        this.WrittenBytes = 'WrittenBytes' in params ? params.WrittenBytes : null;

    }
}

/**
 * Scheduled scaling-out of weekly recurring tasks policy
 * @class
 */
class WeekRepeatStrategy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specific time for repetition task execution, such as 01:02:00.
         * @type {string || null}
         */
        this.ExecuteAtTimeOfDay = null;

        /**
         * Ordinal number description of the day of a week, for example, [1,3,4] indicates Monday, Wednesday, and Thursday.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<number> || null}
         */
        this.DaysOfWeek = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ExecuteAtTimeOfDay = 'ExecuteAtTimeOfDay' in params ? params.ExecuteAtTimeOfDay : null;
        this.DaysOfWeek = 'DaysOfWeek' in params ? params.DaysOfWeek : null;

    }
}

/**
 * Spark query details.
 * @class
 */
class SparkQuery extends  AbstractModel {
    constructor(){
        super();

        /**
         * Execution statement.
         * @type {string || null}
         */
        this.Statement = null;

        /**
         * Execution duration (ms).
         * @type {number || null}
         */
        this.Duration = null;

        /**
         * Execution status.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Query ID.
         * @type {string || null}
         */
        this.Id = null;

        /**
         * Number of scanned partitions.
         * @type {number || null}
         */
        this.ScanPartitionNum = null;

        /**
         * Total number of scanned rows.
         * @type {number || null}
         */
        this.ScanRowNum = null;

        /**
         * Total number of scanned files.
         * @type {number || null}
         */
        this.ScanFileNum = null;

        /**
         * Total data volume scanned by query (bytes).
         * @type {number || null}
         */
        this.ScanTotalData = null;

        /**
         * Application ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.ApplicationId = null;

        /**
         * Total number of output rows.
         * @type {number || null}
         */
        this.OutputRowNum = null;

        /**
         * Total number of output files.
         * @type {number || null}
         */
        this.OutputFileNum = null;

        /**
         * Number of output partitions.
         * @type {number || null}
         */
        this.OutputPartitionNum = null;

        /**
         * Total output data volume (bytes).
         * @type {number || null}
         */
        this.OutputTotalData = null;

        /**
         * Start time.
         * @type {number || null}
         */
        this.BeginTime = null;

        /**
         * End time.
         * @type {number || null}
         */
        this.EndTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Statement = 'Statement' in params ? params.Statement : null;
        this.Duration = 'Duration' in params ? params.Duration : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Id = 'Id' in params ? params.Id : null;
        this.ScanPartitionNum = 'ScanPartitionNum' in params ? params.ScanPartitionNum : null;
        this.ScanRowNum = 'ScanRowNum' in params ? params.ScanRowNum : null;
        this.ScanFileNum = 'ScanFileNum' in params ? params.ScanFileNum : null;
        this.ScanTotalData = 'ScanTotalData' in params ? params.ScanTotalData : null;
        this.ApplicationId = 'ApplicationId' in params ? params.ApplicationId : null;
        this.OutputRowNum = 'OutputRowNum' in params ? params.OutputRowNum : null;
        this.OutputFileNum = 'OutputFileNum' in params ? params.OutputFileNum : null;
        this.OutputPartitionNum = 'OutputPartitionNum' in params ? params.OutputPartitionNum : null;
        this.OutputTotalData = 'OutputTotalData' in params ? params.OutputTotalData : null;
        this.BeginTime = 'BeginTime' in params ? params.BeginTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;

    }
}

/**
 * Sampling sequence.
 * @class
 */
class Dps extends  AbstractModel {
    constructor(){
        super();

        /**
         * Timestamp.
         * @type {string || null}
         */
        this.Timestamp = null;

        /**
         * Sampling value.
         * @type {string || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Timestamp = 'Timestamp' in params ? params.Timestamp : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * TerminateTasks response structure.
 * @class
 */
class TerminateTasksResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteAutoScaleStrategy response structure.
 * @class
 */
class DeleteAutoScaleStrategyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeNodeSpec request structure.
 * @class
 */
class DescribeNodeSpecRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Availability zone (AZ) ID. https://document.capi.woa.com/document/api/1605/76892 can be accessed for related information.
         * @type {number || null}
         */
        this.ZoneId = null;

        /**
         * 0: pay-as-you-go; 1: yearly/monthly subscription; 99: a combination of pay-as-you-go and yearly/monthly subscription. Invalid values will suppress billing display.
         * @type {number || null}
         */
        this.CvmPayMode = null;

        /**
         * Node type: Master,Core,Task,Router,All.
         * @type {string || null}
         */
        this.NodeType = null;

        /**
         * 0: old billing page; 1: new billing page. Invalid values will be deemed to be old billing by default.
         * @type {number || null}
         */
        this.TradeType = null;

        /**
         * Product ID. If left blank, the value is "0". This field is used to represent the product ID in all situations. It is required in front-end scenarios.

44	EMR	V3.5.0
43	EMR	V3.4.0.tlinux
42	EMR	V2.7.0.tlinux
41	DRUID	V1.1.0
67	STARROCKS	V2.2.0
45	DRUID	V1.1.0.tlinux
40	EMRCLOUD	v3.2.0
47	EMR	V4.0.0
48	STARROCKS	V1.2.0
49	STARROCKS	V1.3.0
50	KAFKA	V2.0.0
51	STARROCKS	V1.4.0
52	EMR-TKE	V1.0.0
53	EMR	V3.6.0
54	STARROCKS	V2.0.0
55	EMR-TKE	V1.0.1
56	EMR-TKE	DLCV1.0.0
57	EMR	V2.8.0
58	EMR	V3.6.1
59	SERVERLESS	V1.0.0
60	EMR-TKE	V1.1.0
62	STARROCKS	V2.1.1
63	STARROCKS	V2.1.1.tlinux
64	EMR-TKE	TCCV1.0.0
65	EMR-TKE-AI	V1.0.0
66	RSS	V1.0.0
24	EMR	TianQiong-V1.0.0
3	EMR	V2.0.1.tlinux
4	EMR	V2.1.0
7	EMR	V3.0.0
8	EMR	V3.0.0.tlinux
9	EMR	V2.2.0
11	CLICKHOUSE	V1.0.0
12	CLICKHOUSE	V1.0.0.tlinux
16	EMR	V2.3.0
17	CLICKHOUSE	V1.1.0
18	CLICKHOUSE	V1.1.0.tlinux
19	EMR	V2.4.0
20	EMR	V2.5.0
21	USERCUSTOM	V1.0.0
22	CLICKHOUSE	V1.2.0
39	STARROCKS	V1.1.0
25	EMR	V3.1.0
26	DORIS	V1.0.0
27	KAFKA	V1.0.0
28	EMR	V3.2.0
29	EMR	V2.5.1
30	EMR	V2.6.0
32	DORIS	V1.1.0
33	EMR	V3.2.1
34	EMR	V3.3.0
35	DORIS	V1.2.0
36	STARROCKS	V1.0.0
37	EMR	V3.4.0
38	EMR	V2.7.0
         * @type {number || null}
         */
        this.ProductId = null;

        /**
         * Scenario name.
         * @type {string || null}
         */
        this.SceneName = null;

        /**
         * The type can be ComputeResource, EMR, or a default value. The default value is EMR.
         * @type {string || null}
         */
        this.ResourceBaseType = null;

        /**
         * Computing resource ID.
         * @type {string || null}
         */
        this.ComputeResourceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.CvmPayMode = 'CvmPayMode' in params ? params.CvmPayMode : null;
        this.NodeType = 'NodeType' in params ? params.NodeType : null;
        this.TradeType = 'TradeType' in params ? params.TradeType : null;
        this.ProductId = 'ProductId' in params ? params.ProductId : null;
        this.SceneName = 'SceneName' in params ? params.SceneName : null;
        this.ResourceBaseType = 'ResourceBaseType' in params ? params.ResourceBaseType : null;
        this.ComputeResourceId = 'ComputeResourceId' in params ? params.ComputeResourceId : null;

    }
}

/**
 * ModifySLInstanceBasic request structure.
 * @class
 */
class ModifySLInstanceBasicRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Instance name.
         * @type {string || null}
         */
        this.ClusterName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ClusterName = 'ClusterName' in params ? params.ClusterName : null;

    }
}

/**
 * Serverless HBase instance information
 * @class
 */
class SLInstanceInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance string ID.
         * @type {string || null}
         */
        this.ClusterId = null;

        /**
         * Instance numeric ID
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Status description.
         * @type {string || null}
         */
        this.StatusDesc = null;

        /**
         * Health status.
         * @type {string || null}
         */
        this.HealthStatus = null;

        /**
         * Instance name
         * @type {string || null}
         */
        this.ClusterName = null;

        /**
         * Region ID
         * @type {number || null}
         */
        this.RegionId = null;

        /**
         * Primary AZ ID.
         * @type {number || null}
         */
        this.ZoneId = null;

        /**
         * Primary AZ.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * User APP ID.
         * @type {number || null}
         */
        this.AppId = null;

        /**
         * Primary AZ VPC ID.
         * @type {number || null}
         */
        this.VpcId = null;

        /**
         * Primary AZ subnet ID.
         * @type {number || null}
         */
        this.SubnetId = null;

        /**
         * Status code
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Creation time.
         * @type {string || null}
         */
        this.AddTime = null;

        /**
         * Cluster billing type. 0 indicates pay-as-you-go. 1 indicates monthly subscription.
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Multi-AZ information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ZoneSetting> || null}
         */
        this.ZoneSettings = null;

        /**
         * Instance tag.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Auto-renewal flag. 0: notify before expiration but do not auto-renew; 1: notify before expiration and auto-renew; and 2: do not notify before expiration and do not auto-renew. If the business does not support renewal, the value is set to 0.
         * @type {number || null}
         */
        this.AutoRenewFlag = null;

        /**
         * Isolation time. For instances that are not isolated, the API returns 0000-00-00 00:00:00.
         * @type {string || null}
         */
        this.IsolateTime = null;

        /**
         * Expiration time. For post-paid instances, the API returns 0000-00-00 00:00:00.
         * @type {string || null}
         */
        this.ExpireTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ClusterId = 'ClusterId' in params ? params.ClusterId : null;
        this.Id = 'Id' in params ? params.Id : null;
        this.StatusDesc = 'StatusDesc' in params ? params.StatusDesc : null;
        this.HealthStatus = 'HealthStatus' in params ? params.HealthStatus : null;
        this.ClusterName = 'ClusterName' in params ? params.ClusterName : null;
        this.RegionId = 'RegionId' in params ? params.RegionId : null;
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.AppId = 'AppId' in params ? params.AppId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.AddTime = 'AddTime' in params ? params.AddTime : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;

        if (params.ZoneSettings) {
            this.ZoneSettings = new Array();
            for (let z in params.ZoneSettings) {
                let obj = new ZoneSetting();
                obj.deserialize(params.ZoneSettings[z]);
                this.ZoneSettings.push(obj);
            }
        }

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.AutoRenewFlag = 'AutoRenewFlag' in params ? params.AutoRenewFlag : null;
        this.IsolateTime = 'IsolateTime' in params ? params.IsolateTime : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;

    }
}

/**
 * Default configurations of resource scheduling.
 * @class
 */
class DefaultSetting extends  AbstractModel {
    constructor(){
        super();

        /**
         * Name: the key for input parameters.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Description.
         * @type {string || null}
         */
        this.Desc = null;

        /**
         * Prompt.
         * @type {string || null}
         */
        this.Prompt = null;

        /**
         * Key: display the configuration item in the configuration file.
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Name value.
         * @type {string || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Desc = 'Desc' in params ? params.Desc : null;
        this.Prompt = 'Prompt' in params ? params.Prompt : null;
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * COS-related configuration
 * @class
 */
class COSSettings extends  AbstractModel {
    constructor(){
        super();

        /**
         * COS `SecretId`
         * @type {string || null}
         */
        this.CosSecretId = null;

        /**
         * COS `SecrectKey`
         * @type {string || null}
         */
        this.CosSecretKey = null;

        /**
         * COS path to log
         * @type {string || null}
         */
        this.LogOnCosPath = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CosSecretId = 'CosSecretId' in params ? params.CosSecretId : null;
        this.CosSecretKey = 'CosSecretKey' in params ? params.CosSecretKey : null;
        this.LogOnCosPath = 'LogOnCosPath' in params ? params.LogOnCosPath : null;

    }
}

/**
 * Cluster instance information
 * @class
 */
class ClusterInstancesInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Cluster ID.
         * @type {string || null}
         */
        this.ClusterId = null;

        /**
         * Title
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Ftitle = null;

        /**
         * Cluster name.
         * @type {string || null}
         */
        this.ClusterName = null;

        /**
         * Region ID.
         * @type {number || null}
         */
        this.RegionId = null;

        /**
         * Region ID.
         * @type {number || null}
         */
        this.ZoneId = null;

        /**
         * User AppID.
         * @type {number || null}
         */
        this.AppId = null;

        /**
         * User UIN.
         * @type {string || null}
         */
        this.Uin = null;

        /**
         * Project ID.
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * Cluster VPCID.
         * @type {number || null}
         */
        this.VpcId = null;

        /**
         * Subnet ID.
         * @type {number || null}
         */
        this.SubnetId = null;

        /**
         * Instance status code. Valid range:
<li>2: the cluster is running.</li>
<li>3: the cluster is being created.</li>
<li>4: the cluster is being scaled out.</li>
<li>5: Router nodes are being added to the cluster.</li>
<li>6: components are being installed in the cluster.</li>
<li>7: commands are being executed in the cluster.</li>
<li>8: the service is being restarted.</li>
<li>9: maintenance is in progress.</li>
<li>10: the service is being suspended.</li>
<li>11: the cluster is exiting maintenance.</li>
<li>12: the cluster is exiting suspension.</li>
<li>13: the configuration is being distributed.</li>
<li>14: the cluster is being terminated.</li>
<li>15: the Core node is being destroyed.</li>
<li>16: the Task node is being destroyed.</li>
<li>17: the Router node is being destroyed.</li>
<li>18: the web proxy password is being changed.</li>
<li>19: the cluster is being isolated.</li>
<li>20: the cluster is undergoing a reversal transaction.</li>
<li>21: the cluster is being recycled.</li>
<li>22: the instance is waiting for resizing.</li>
<li>23: the cluster has been isolated.</li>
<li>24: the number of nodes is being reduced.</li>
<li>33: the cluster is waiting for a refund.</li>
<li>34: the cluster has received a refund.</li>
<li>301: creation failed.</li>
<li>302: scale-out failed.</li>
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Adding time.
         * @type {string || null}
         */
        this.AddTime = null;

        /**
         * Runtime.
         * @type {string || null}
         */
        this.RunTime = null;

        /**
         * Cluster product configuration information
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {EmrProductConfigOutter || null}
         */
        this.Config = null;

        /**
         * Public network IP address of the primary node.
         * @type {string || null}
         */
        this.MasterIp = null;

        /**
         * EMR version.
         * @type {string || null}
         */
        this.EmrVersion = null;

        /**
         * Charge type.
         * @type {number || null}
         */
        this.ChargeType = null;

        /**
         * Transaction version.
         * @type {number || null}
         */
        this.TradeVersion = null;

        /**
         * Resource order ID.
         * @type {number || null}
         */
        this.ResourceOrderId = null;

        /**
         * Whether it is a billing cluster.
         * @type {number || null}
         */
        this.IsTradeCluster = null;

        /**
         * Alarm information of cluster error status.
         * @type {string || null}
         */
        this.AlarmInfo = null;

        /**
         * Whether to adopt new architecture.
         * @type {number || null}
         */
        this.IsWoodpeckerCluster = null;

        /**
         * Metadatabase information.
         * @type {string || null}
         */
        this.MetaDb = null;

        /**
         * Tag information
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Hive metadata information.
         * @type {string || null}
         */
        this.HiveMetaDb = null;

        /**
         * Cluster type: EMR,CLICKHOUSE,DRUID.
         * @type {string || null}
         */
        this.ServiceClass = null;

        /**
         * Alias serialization of all nodes in the cluster.
         * @type {string || null}
         */
        this.AliasInfo = null;

        /**
         * Cluster version ID.
         * @type {number || null}
         */
        this.ProductId = null;

        /**
         * Region ID.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Scenario name.
         * @type {string || null}
         */
        this.SceneName = null;

        /**
         * Scenario-based cluster type.
         * @type {string || null}
         */
        this.SceneServiceClass = null;

        /**
         * Scenario-based EMR version.
         * @type {string || null}
         */
        this.SceneEmrVersion = null;

        /**
         * Scenario-based cluster type.
         * @type {string || null}
         */
        this.DisplayName = null;

        /**
         * vpc name
         * @type {string || null}
         */
        this.VpcName = null;

        /**
         * subnet name
         * @type {string || null}
         */
        this.SubnetName = null;

        /**
         * Cluster dependency
Note: This field may return `null`, indicating that no valid value was found.
         * @type {Array.<ClusterExternalServiceInfo> || null}
         */
        this.ClusterExternalServiceInfo = null;

        /**
         * Cluster vpcid string type.
         * @type {string || null}
         */
        this.UniqVpcId = null;

        /**
         * Subnet ID string type.
         * @type {string || null}
         */
        this.UniqSubnetId = null;

        /**
         * Node information
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {Array.<TopologyInfo> || null}
         */
        this.TopologyInfoList = null;

        /**
         * Whether it is a cross-AZ cluster.
         * @type {boolean || null}
         */
        this.IsMultiZoneCluster = null;

        /**
         * Whether to enable automatic compensation for abnormal nodes.
         * @type {boolean || null}
         */
        this.IsCvmReplace = null;

        /**
         * Title.
         * @type {string || null}
         */
        this.ClusterTitle = null;

        /**
         * Cluster product configuration information

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {EmrProductConfigDetail || null}
         */
        this.ConfigDetail = null;

        /**
         * Number of file systems bound to a cluster.
         * @type {number || null}
         */
        this.BindFileSystemNum = null;

        /**
         * Bound list of the RSS cluster.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ClusterRelationMeta> || null}
         */
        this.ClusterRelationInfoList = null;

        /**
         * Redis information.
         * @type {string || null}
         */
        this.RedisId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.ClusterId = 'ClusterId' in params ? params.ClusterId : null;
        this.Ftitle = 'Ftitle' in params ? params.Ftitle : null;
        this.ClusterName = 'ClusterName' in params ? params.ClusterName : null;
        this.RegionId = 'RegionId' in params ? params.RegionId : null;
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.AppId = 'AppId' in params ? params.AppId : null;
        this.Uin = 'Uin' in params ? params.Uin : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.AddTime = 'AddTime' in params ? params.AddTime : null;
        this.RunTime = 'RunTime' in params ? params.RunTime : null;

        if (params.Config) {
            let obj = new EmrProductConfigOutter();
            obj.deserialize(params.Config)
            this.Config = obj;
        }
        this.MasterIp = 'MasterIp' in params ? params.MasterIp : null;
        this.EmrVersion = 'EmrVersion' in params ? params.EmrVersion : null;
        this.ChargeType = 'ChargeType' in params ? params.ChargeType : null;
        this.TradeVersion = 'TradeVersion' in params ? params.TradeVersion : null;
        this.ResourceOrderId = 'ResourceOrderId' in params ? params.ResourceOrderId : null;
        this.IsTradeCluster = 'IsTradeCluster' in params ? params.IsTradeCluster : null;
        this.AlarmInfo = 'AlarmInfo' in params ? params.AlarmInfo : null;
        this.IsWoodpeckerCluster = 'IsWoodpeckerCluster' in params ? params.IsWoodpeckerCluster : null;
        this.MetaDb = 'MetaDb' in params ? params.MetaDb : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.HiveMetaDb = 'HiveMetaDb' in params ? params.HiveMetaDb : null;
        this.ServiceClass = 'ServiceClass' in params ? params.ServiceClass : null;
        this.AliasInfo = 'AliasInfo' in params ? params.AliasInfo : null;
        this.ProductId = 'ProductId' in params ? params.ProductId : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.SceneName = 'SceneName' in params ? params.SceneName : null;
        this.SceneServiceClass = 'SceneServiceClass' in params ? params.SceneServiceClass : null;
        this.SceneEmrVersion = 'SceneEmrVersion' in params ? params.SceneEmrVersion : null;
        this.DisplayName = 'DisplayName' in params ? params.DisplayName : null;
        this.VpcName = 'VpcName' in params ? params.VpcName : null;
        this.SubnetName = 'SubnetName' in params ? params.SubnetName : null;

        if (params.ClusterExternalServiceInfo) {
            this.ClusterExternalServiceInfo = new Array();
            for (let z in params.ClusterExternalServiceInfo) {
                let obj = new ClusterExternalServiceInfo();
                obj.deserialize(params.ClusterExternalServiceInfo[z]);
                this.ClusterExternalServiceInfo.push(obj);
            }
        }
        this.UniqVpcId = 'UniqVpcId' in params ? params.UniqVpcId : null;
        this.UniqSubnetId = 'UniqSubnetId' in params ? params.UniqSubnetId : null;

        if (params.TopologyInfoList) {
            this.TopologyInfoList = new Array();
            for (let z in params.TopologyInfoList) {
                let obj = new TopologyInfo();
                obj.deserialize(params.TopologyInfoList[z]);
                this.TopologyInfoList.push(obj);
            }
        }
        this.IsMultiZoneCluster = 'IsMultiZoneCluster' in params ? params.IsMultiZoneCluster : null;
        this.IsCvmReplace = 'IsCvmReplace' in params ? params.IsCvmReplace : null;
        this.ClusterTitle = 'ClusterTitle' in params ? params.ClusterTitle : null;

        if (params.ConfigDetail) {
            let obj = new EmrProductConfigDetail();
            obj.deserialize(params.ConfigDetail)
            this.ConfigDetail = obj;
        }
        this.BindFileSystemNum = 'BindFileSystemNum' in params ? params.BindFileSystemNum : null;

        if (params.ClusterRelationInfoList) {
            this.ClusterRelationInfoList = new Array();
            for (let z in params.ClusterRelationInfoList) {
                let obj = new ClusterRelationMeta();
                obj.deserialize(params.ClusterRelationInfoList[z]);
                this.ClusterRelationInfoList.push(obj);
            }
        }
        this.RedisId = 'RedisId' in params ? params.RedisId : null;

    }
}

/**
 * ModifyResourcesTags response structure.
 * @class
 */
class ModifyResourcesTagsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of resource IDs with successful modification
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.SuccessList = null;

        /**
         * List of resource IDs with failed modification
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.FailList = null;

        /**
         * List of resource IDs with partial successful modification
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.PartSuccessList = null;

        /**
         * Mapping list of cluster IDs and process IDs
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ClusterIDToFlowID> || null}
         */
        this.ClusterToFlowIdList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SuccessList = 'SuccessList' in params ? params.SuccessList : null;
        this.FailList = 'FailList' in params ? params.FailList : null;
        this.PartSuccessList = 'PartSuccessList' in params ? params.PartSuccessList : null;

        if (params.ClusterToFlowIdList) {
            this.ClusterToFlowIdList = new Array();
            for (let z in params.ClusterToFlowIdList) {
                let obj = new ClusterIDToFlowID();
                obj.deserialize(params.ClusterToFlowIdList[z]);
                this.ClusterToFlowIdList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateSLInstance request structure.
 * @class
 */
class CreateSLInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance name.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Instance billing mode. 0 indicates postpaid, i.e., pay-as-you-go.
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Instance storage type. Fill in CLOUD_HSSD to represent high-performance cloud storage.
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * The disk capacity of a single node of the instance, in GB. The disk capacity of a single node should be greater than or equal to 100 and less than or equal to 250 x the number of CPU cores. The capacity adjustment step is 100.
         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * Instance node specification. You can fill in 4C16G, 8C32G, 16C64G, or 32C128G, which is case-insensitive.
         * @type {string || null}
         */
        this.NodeType = null;

        /**
         * Detailed configuration of the instance AZ. Currently, multiple availability zones are supported. The number of AZs must be 1 or 3, including the region names, VPC information, and number of nodes. The total number of nodes across all zones must be greater than or equal to 3 and less than or equal to 50.
         * @type {Array.<ZoneSetting> || null}
         */
        this.ZoneSettings = null;

        /**
         * List of tags to be bound to the instance.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Prepaid parameter.
         * @type {PrePaySetting || null}
         */
        this.PrePaySetting = null;

        /**
         * The unique random identifier with a time efficiency of 5 minutes, which needs to be specified by the caller to prevent the client from creating resources repeatedly. For example: a9a90aa6-****-****-****-fae360632808.
         * @type {string || null}
         */
        this.ClientToken = null;

        /**
         * 
         * @type {string || null}
         */
        this.DeploymentMode = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.NodeType = 'NodeType' in params ? params.NodeType : null;

        if (params.ZoneSettings) {
            this.ZoneSettings = new Array();
            for (let z in params.ZoneSettings) {
                let obj = new ZoneSetting();
                obj.deserialize(params.ZoneSettings[z]);
                this.ZoneSettings.push(obj);
            }
        }

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }

        if (params.PrePaySetting) {
            let obj = new PrePaySetting();
            obj.deserialize(params.PrePaySetting)
            this.PrePaySetting = obj;
        }
        this.ClientToken = 'ClientToken' in params ? params.ClientToken : null;
        this.DeploymentMode = 'DeploymentMode' in params ? params.DeploymentMode : null;

    }
}

/**
 * ScaleOutInstance request structure.
 * @class
 */
class ScaleOutInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Time unit of scale-out. Valid values:
<li>s: Second. When `PayMode` is 0, `TimeUnit` can only be `s`.</li>
<li>m: Month. When `PayMode` is 1, `TimeUnit` can only be `m`.</li>
         * @type {string || null}
         */
        this.TimeUnit = null;

        /**
         * Time span of scale-out, which needs to be used together with `TimeUnit`.
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Instance billing mode. Valid value:
<li>0: Pay-as-you-go.</li>
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Client token.
         * @type {string || null}
         */
        this.ClientToken = null;

        /**
         * Bootstrap script settings.
         * @type {Array.<PreExecuteFileSettings> || null}
         */
        this.PreExecutedFileSettings = null;

        /**
         * Number of task nodes to be added.
         * @type {number || null}
         */
        this.TaskCount = null;

        /**
         * Number of core nodes to be added.
         * @type {number || null}
         */
        this.CoreCount = null;

        /**
         * Processes unnecessary for scale-out.
         * @type {Array.<number> || null}
         */
        this.UnNecessaryNodeList = null;

        /**
         * Number of router nodes to be added.
         * @type {number || null}
         */
        this.RouterCount = null;

        /**
         * Deployed service.
<li>`SoftDeployInfo` and `ServiceNodeInfo` are in the same group and mutually exclusive with `UnNecessaryNodeList`.</li>
<li>The combination of `SoftDeployInfo` and `ServiceNodeInfo` is recommended.</li>
         * @type {Array.<number> || null}
         */
        this.SoftDeployInfo = null;

        /**
         * Started process.
         * @type {Array.<number> || null}
         */
        this.ServiceNodeInfo = null;

        /**
         * List of spread placement group IDs. Only one can be specified currently.
         * @type {Array.<string> || null}
         */
        this.DisasterRecoverGroupIds = null;

        /**
         * List of tags bound to added nodes.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Resource type selected for scale-out. Valid values: "HOST","POD","MNode", where HOST indicates an ordinary CVM resource, POD indicates a resource provided by the TKE cluster or EKS cluster, and MNode indicates a fully managed resource type.
         * @type {string || null}
         */
        this.HardwareResourceType = null;

        /**
         * Specified information such as pod specification and source for scale-out with pod resources.
         * @type {PodSpec || null}
         */
        this.PodSpec = null;

        /**
         * Server group name selected for ClickHouse cluster scale-out.
         * @type {string || null}
         */
        this.ClickHouseClusterName = null;

        /**
         * Server group type selected for ClickHouse cluster scale-out. Valid values: `new` (create a group) and `old` (select an existing group).
         * @type {string || null}
         */
        this.ClickHouseClusterType = null;

        /**
         * Yarn node label specified for rule-based scale-out.
         * @type {string || null}
         */
        this.YarnNodeLabel = null;

        /**
         * Custom pod permission and parameter
         * @type {PodParameter || null}
         */
        this.PodParameter = null;

        /**
         * Number of master nodes to be added.
When a ClickHouse cluster is scaled, this parameter does not take effect.
When a Kafka cluster is scaled, this parameter does not take effect.
When `HardwareResourceType` is `pod`, this parameter does not take effect.
         * @type {number || null}
         */
        this.MasterCount = null;

        /**
         * Whether to start the service after scale-out. `true`: Yes; `false`: No.
         * @type {string || null}
         */
        this.StartServiceAfterScaleOut = null;

        /**
         * AZ, which defaults to the primary AZ of the cluster.
         * @type {number || null}
         */
        this.ZoneId = null;

        /**
         * Subnet, which defaults to the subnet used when the cluster is created.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Pre-defined configuration set
         * @type {string || null}
         */
        this.ScaleOutServiceConfAssign = null;

        /**
         * Whether to enable auto-renewal. Valid values: `0` (no), `1` (yes).
         * @type {number || null}
         */
        this.AutoRenew = null;

        /**
         * The type can be ComputeResource, EMR, or a default value. The default value is EMR. When the type is EMR, InstanceId is effective. When the type is ComputeResource, ComputeResourceId is used.
         * @type {string || null}
         */
        this.ResourceBaseType = null;

        /**
         * Computing resource ID.
         * @type {string || null}
         */
        this.ComputeResourceId = null;

        /**
         * Advanced settings of computing resources.
         * @type {ComputeResourceAdvanceParams || null}
         */
        this.ComputeResourceAdvanceParams = null;

        /**
         * Node tag information: currently used only in Terraform.
         * @type {NodeMark || null}
         */
        this.NodeMarks = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TimeUnit = 'TimeUnit' in params ? params.TimeUnit : null;
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.ClientToken = 'ClientToken' in params ? params.ClientToken : null;

        if (params.PreExecutedFileSettings) {
            this.PreExecutedFileSettings = new Array();
            for (let z in params.PreExecutedFileSettings) {
                let obj = new PreExecuteFileSettings();
                obj.deserialize(params.PreExecutedFileSettings[z]);
                this.PreExecutedFileSettings.push(obj);
            }
        }
        this.TaskCount = 'TaskCount' in params ? params.TaskCount : null;
        this.CoreCount = 'CoreCount' in params ? params.CoreCount : null;
        this.UnNecessaryNodeList = 'UnNecessaryNodeList' in params ? params.UnNecessaryNodeList : null;
        this.RouterCount = 'RouterCount' in params ? params.RouterCount : null;
        this.SoftDeployInfo = 'SoftDeployInfo' in params ? params.SoftDeployInfo : null;
        this.ServiceNodeInfo = 'ServiceNodeInfo' in params ? params.ServiceNodeInfo : null;
        this.DisasterRecoverGroupIds = 'DisasterRecoverGroupIds' in params ? params.DisasterRecoverGroupIds : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.HardwareResourceType = 'HardwareResourceType' in params ? params.HardwareResourceType : null;

        if (params.PodSpec) {
            let obj = new PodSpec();
            obj.deserialize(params.PodSpec)
            this.PodSpec = obj;
        }
        this.ClickHouseClusterName = 'ClickHouseClusterName' in params ? params.ClickHouseClusterName : null;
        this.ClickHouseClusterType = 'ClickHouseClusterType' in params ? params.ClickHouseClusterType : null;
        this.YarnNodeLabel = 'YarnNodeLabel' in params ? params.YarnNodeLabel : null;

        if (params.PodParameter) {
            let obj = new PodParameter();
            obj.deserialize(params.PodParameter)
            this.PodParameter = obj;
        }
        this.MasterCount = 'MasterCount' in params ? params.MasterCount : null;
        this.StartServiceAfterScaleOut = 'StartServiceAfterScaleOut' in params ? params.StartServiceAfterScaleOut : null;
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.ScaleOutServiceConfAssign = 'ScaleOutServiceConfAssign' in params ? params.ScaleOutServiceConfAssign : null;
        this.AutoRenew = 'AutoRenew' in params ? params.AutoRenew : null;
        this.ResourceBaseType = 'ResourceBaseType' in params ? params.ResourceBaseType : null;
        this.ComputeResourceId = 'ComputeResourceId' in params ? params.ComputeResourceId : null;

        if (params.ComputeResourceAdvanceParams) {
            let obj = new ComputeResourceAdvanceParams();
            obj.deserialize(params.ComputeResourceAdvanceParams)
            this.ComputeResourceAdvanceParams = obj;
        }

        if (params.NodeMarks) {
            let obj = new NodeMark();
            obj.deserialize(params.NodeMarks)
            this.NodeMarks = obj;
        }

    }
}

/**
 * ResetYarnConfig request structure.
 * @class
 */
class ResetYarnConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * English ID of the EMR cluster.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Alias of the configuration to be reset. The options are as follows:

- capacityLabel: Reset the tag management configuration.
- fair: Reset the fair scheduling configuration.
- capacity: Reset the capacity scheduling configuration.
         * @type {string || null}
         */
        this.Key = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Key = 'Key' in params ? params.Key : null;

    }
}

/**
 * Kyuubi query information.
 * @class
 */
class KyuubiQueryInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Submitter IP address.
         * @type {string || null}
         */
        this.ClientIP = null;

        /**
         * Execution duration.
         * @type {number || null}
         */
        this.Duration = null;

        /**
         * End time.
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Engine Id
         * @type {string || null}
         */
        this.EngineID = null;

        /**
         * Computing engine.
         * @type {string || null}
         */
        this.EngineType = null;

        /**
         * ID
         * @type {string || null}
         */
        this.Id = null;

        /**
         * Session Id
         * @type {string || null}
         */
        this.SessionID = null;

        /**
         * Start time.
         * @type {number || null}
         */
        this.BeginTime = null;

        /**
         * Execution status.
         * @type {string || null}
         */
        this.ExecutionState = null;

        /**
         * Execution statement.
         * @type {string || null}
         */
        this.ExecutionStatement = null;

        /**
         * Statement Id
         * @type {string || null}
         */
        this.StatementID = null;

        /**
         * User who submits requests.
         * @type {string || null}
         */
        this.User = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ClientIP = 'ClientIP' in params ? params.ClientIP : null;
        this.Duration = 'Duration' in params ? params.Duration : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.EngineID = 'EngineID' in params ? params.EngineID : null;
        this.EngineType = 'EngineType' in params ? params.EngineType : null;
        this.Id = 'Id' in params ? params.Id : null;
        this.SessionID = 'SessionID' in params ? params.SessionID : null;
        this.BeginTime = 'BeginTime' in params ? params.BeginTime : null;
        this.ExecutionState = 'ExecutionState' in params ? params.ExecutionState : null;
        this.ExecutionStatement = 'ExecutionStatement' in params ? params.ExecutionStatement : null;
        this.StatementID = 'StatementID' in params ? params.StatementID : null;
        this.User = 'User' in params ? params.User : null;

    }
}

/**
 * Advanced settings of computing resources.
 * @class
 */
class ComputeResourceAdvanceParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * Node label array.
         * @type {Array.<TkeLabel> || null}
         */
        this.Labels = null;

        /**
         * Node taint.
         * @type {Array.<Taint> || null}
         */
        this.Taints = null;

        /**
         * Base64-encoded user script: executed before node initializing.
         * @type {string || null}
         */
        this.PreStartUserScript = null;

        /**
         * Base64-encoded user script. This script executes after Kubernetes components initialize. Users should ensure script reentrancy and implement retry logic. Both the script and its generated log files are accessible at the node path: /data/ccs_userscript/.
         * @type {string || null}
         */
        this.UserScript = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Labels) {
            this.Labels = new Array();
            for (let z in params.Labels) {
                let obj = new TkeLabel();
                obj.deserialize(params.Labels[z]);
                this.Labels.push(obj);
            }
        }

        if (params.Taints) {
            this.Taints = new Array();
            for (let z in params.Taints) {
                let obj = new Taint();
                obj.deserialize(params.Taints[z]);
                this.Taints.push(obj);
            }
        }
        this.PreStartUserScript = 'PreStartUserScript' in params ? params.PreStartUserScript : null;
        this.UserScript = 'UserScript' in params ? params.UserScript : null;

    }
}

/**
 * DescribeHBaseTableOverview response structure.
 * @class
 */
class DescribeHBaseTableOverviewResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Overview data array
         * @type {Array.<OverviewRow> || null}
         */
        this.TableMonitorList = null;

        /**
         * Overview data array length
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Table schema information
         * @type {Array.<TableSchemaItem> || null}
         */
        this.SchemaList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.TableMonitorList) {
            this.TableMonitorList = new Array();
            for (let z in params.TableMonitorList) {
                let obj = new OverviewRow();
                obj.deserialize(params.TableMonitorList[z]);
                this.TableMonitorList.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.SchemaList) {
            this.SchemaList = new Array();
            for (let z in params.SchemaList) {
                let obj = new TableSchemaItem();
                obj.deserialize(params.SchemaList[z]);
                this.SchemaList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeAutoScaleGroupGlobalConf request structure.
 * @class
 */
class DescribeAutoScaleGroupGlobalConfRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * ModifyAutoScaleStrategy request structure.
 * @class
 */
class ModifyAutoScaleStrategyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Automatic scaling rule type. 1: Scaling by load metrics; 2: Scaling by time
         * @type {number || null}
         */
        this.StrategyType = null;

        /**
         * Metric for load-based scaling.
         * @type {Array.<LoadAutoScaleStrategy> || null}
         */
        this.LoadAutoScaleStrategies = null;

        /**
         * Rule for time-based scaling
         * @type {Array.<TimeAutoScaleStrategy> || null}
         */
        this.TimeAutoScaleStrategies = null;

        /**
         * Scaling group ID.
         * @type {number || null}
         */
        this.GroupId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StrategyType = 'StrategyType' in params ? params.StrategyType : null;

        if (params.LoadAutoScaleStrategies) {
            this.LoadAutoScaleStrategies = new Array();
            for (let z in params.LoadAutoScaleStrategies) {
                let obj = new LoadAutoScaleStrategy();
                obj.deserialize(params.LoadAutoScaleStrategies[z]);
                this.LoadAutoScaleStrategies.push(obj);
            }
        }

        if (params.TimeAutoScaleStrategies) {
            this.TimeAutoScaleStrategies = new Array();
            for (let z in params.TimeAutoScaleStrategies) {
                let obj = new TimeAutoScaleStrategy();
                obj.deserialize(params.TimeAutoScaleStrategies[z]);
                this.TimeAutoScaleStrategies.push(obj);
            }
        }
        this.GroupId = 'GroupId' in params ? params.GroupId : null;

    }
}

/**
 * AttachDisks request structure.
 * @class
 */
class AttachDisksRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of the EMR cluster instance.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Cloud disk ID required for mounting.
         * @type {Array.<string> || null}
         */
        this.DiskIds = null;

        /**
         * Mount mode. Valid values.
AUTO_RENEW: auto-renewal.
ALIGN_DEADLINE: automatic alignment with the deadline.
         * @type {string || null}
         */
        this.AlignType = null;

        /**
         * List of CVM node IDs requiring mounting.
         * @type {Array.<string> || null}
         */
        this.CvmInstanceIds = null;

        /**
         * Whether to mount newly purchased cloud disks.
         * @type {boolean || null}
         */
        this.CreateDisk = null;

        /**
         * Specifications of newly purchased cloud disks.
         * @type {NodeSpecDiskV2 || null}
         */
        this.DiskSpec = null;

        /**
         * Optional parameter. Only mount operation is performed if this parameter is not passed. When True is passed, the CBS will be set to termination with the cloud host upon successful mounting. This is only applicable to pay-as-you-go cloud disk.
         * @type {boolean || null}
         */
        this.DeleteWithInstance = null;

        /**
         * Name list of services that can be configured when a new disk is mounted.
         * @type {Array.<string> || null}
         */
        this.SelectiveConfServices = null;

        /**
         * Disk billing type (1: monthly subscription, 3: committed use).
         * @type {number || null}
         */
        this.ChargeType = null;

        /**
         * Disk committed use and purchase duration (only supports 12, 24, 36, 48, and 60).
         * @type {number || null}
         */
        this.UnderWriteDuration = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.DiskIds = 'DiskIds' in params ? params.DiskIds : null;
        this.AlignType = 'AlignType' in params ? params.AlignType : null;
        this.CvmInstanceIds = 'CvmInstanceIds' in params ? params.CvmInstanceIds : null;
        this.CreateDisk = 'CreateDisk' in params ? params.CreateDisk : null;

        if (params.DiskSpec) {
            let obj = new NodeSpecDiskV2();
            obj.deserialize(params.DiskSpec)
            this.DiskSpec = obj;
        }
        this.DeleteWithInstance = 'DeleteWithInstance' in params ? params.DeleteWithInstance : null;
        this.SelectiveConfServices = 'SelectiveConfServices' in params ? params.SelectiveConfServices : null;
        this.ChargeType = 'ChargeType' in params ? params.ChargeType : null;
        this.UnderWriteDuration = 'UnderWriteDuration' in params ? params.UnderWriteDuration : null;

    }
}

/**
 * DescribeSparkQueries request structure.
 * @class
 */
class DescribeSparkQueriesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Start time.
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * End time.
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Starting offset for pages, starting from 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Page size. Valid range: [1,100].
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Execution status: RUNNING,COMPLETED, FAILED.
         * @type {Array.<string> || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * Node specifications type.
 * @class
 */
class NodeSpecInstanceType extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifications.
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * 4
         * @type {number || null}
         */
        this.Cpu = null;

        /**
         * 8, in GB.
         * @type {number || null}
         */
        this.Memory = null;

        /**
         * Order, with the smaller coming first.
         * @type {number || null}
         */
        this.Order = null;

        /**
         * Quantity.
         * @type {number || null}
         */
        this.Num = null;

        /**
         * Reasons for running out of stock.
         * @type {string || null}
         */
        this.SellOutReason = null;

        /**
         * System disk.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<NodeSpecDisk> || null}
         */
        this.SystemDisk = null;

        /**
         * Data disk.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<NodeSpecDisk> || null}
         */
        this.DataDisk = null;

        /**
         * Local data disk.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<NodeSpecDisk> || null}
         */
        this.LocalDataDisk = null;

        /**
         * Reasons for running out of stock.
         * @type {string || null}
         */
        this.SoldOutReason = null;

        /**
         * Model category.
         * @type {string || null}
         */
        this.InstanceFamily = null;

        /**
         * Node name.
         * @type {string || null}
         */
        this.NodeName = null;

        /**
         * Node type.
         * @type {string || null}
         */
        this.NodeType = null;

        /**
         * Category.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Category name.
         * @type {string || null}
         */
        this.TypeName = null;

        /**
         * Category classification.
         * @type {string || null}
         */
        this.FamilyName = null;

        /**
         * CPU type.
         * @type {string || null}
         */
        this.CpuType = null;

        /**
         * RunOut (denoting running out of stock), Less (denoting low inventory), and Enough (denoting sufficient).
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Original price.
         * @type {number || null}
         */
        this.OriginPrice = null;

        /**
         * Supported purchase terms for committed use billing models.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<number> || null}
         */
        this.PrepaidUnderwritePeriods = null;

        /**
         * GPU information.
         * @type {string || null}
         */
        this.GpuDesc = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.Cpu = 'Cpu' in params ? params.Cpu : null;
        this.Memory = 'Memory' in params ? params.Memory : null;
        this.Order = 'Order' in params ? params.Order : null;
        this.Num = 'Num' in params ? params.Num : null;
        this.SellOutReason = 'SellOutReason' in params ? params.SellOutReason : null;

        if (params.SystemDisk) {
            this.SystemDisk = new Array();
            for (let z in params.SystemDisk) {
                let obj = new NodeSpecDisk();
                obj.deserialize(params.SystemDisk[z]);
                this.SystemDisk.push(obj);
            }
        }

        if (params.DataDisk) {
            this.DataDisk = new Array();
            for (let z in params.DataDisk) {
                let obj = new NodeSpecDisk();
                obj.deserialize(params.DataDisk[z]);
                this.DataDisk.push(obj);
            }
        }

        if (params.LocalDataDisk) {
            this.LocalDataDisk = new Array();
            for (let z in params.LocalDataDisk) {
                let obj = new NodeSpecDisk();
                obj.deserialize(params.LocalDataDisk[z]);
                this.LocalDataDisk.push(obj);
            }
        }
        this.SoldOutReason = 'SoldOutReason' in params ? params.SoldOutReason : null;
        this.InstanceFamily = 'InstanceFamily' in params ? params.InstanceFamily : null;
        this.NodeName = 'NodeName' in params ? params.NodeName : null;
        this.NodeType = 'NodeType' in params ? params.NodeType : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.TypeName = 'TypeName' in params ? params.TypeName : null;
        this.FamilyName = 'FamilyName' in params ? params.FamilyName : null;
        this.CpuType = 'CpuType' in params ? params.CpuType : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.OriginPrice = 'OriginPrice' in params ? params.OriginPrice : null;
        this.PrepaidUnderwritePeriods = 'PrepaidUnderwritePeriods' in params ? params.PrepaidUnderwritePeriods : null;
        this.GpuDesc = 'GpuDesc' in params ? params.GpuDesc : null;

    }
}

/**
 * DescribeGroupsSTD request structure.
 * @class
 */
class DescribeGroupsSTDRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster name.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Description key-value pair filter, which is used for conditional filtering queries.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Description order, which is used for sorting.
         * @type {Order || null}
         */
        this.OrderFields = null;

        /**
         * Number of returns.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Pagination parameter.
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

        if (params.OrderFields) {
            let obj = new Order();
            obj.deserialize(params.OrderFields)
            this.OrderFields = obj;
        }
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * ModifyResourceScheduleConfig response structure.
 * @class
 */
class ModifyResourceScheduleConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * `true`: Draft, indicating the resource pool is not refreshed.
         * @type {boolean || null}
         */
        this.IsDraft = null;

        /**
         * Verification error information. If it is not empty, it means that verification fails and configuration is not successful.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * Returned data.
         * @type {string || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IsDraft = 'IsDraft' in params ? params.IsDraft : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.Data = 'Data' in params ? params.Data : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Insight result item.
 * @class
 */
class InsightResult extends  AbstractModel {
    constructor(){
        super();

        /**
         * When Type is HIVE, the value is Hive query ID; when Type is MAPREDUCE, SPARK or TEZ, the value is YarnAppID.
         * @type {string || null}
         */
        this.ID = null;

        /**
         * Insight application type. Value values: HIVE, SPARK, MAPREDUCE, and TEZ.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Insight rule ID.
HIVE-ScanManyMeta: too much scanned metadata.
HIVE-ScanManyPartition: large table scanning.
HIVE-SlowCompile: compilation duration too long.
HIVE-UnSuitableConfig: improper parameter.
MAPREDUCE-MapperDataSkew: Map data skew.
MAPREDUCE-MapperMemWaste: MapMemory resource waste.
MAPREDUCE-MapperSlowTask: slow map task.
MAPREDUCE-MapperTaskGC:MapperTaskGC
MAPREDUCE-MemExceeded: peak memory exceeded.
MAPREDUCE-ReducerDataSkew: Reduce data skew.
MAPREDUCE-ReducerMemWaste: ReduceMemory resource waste.
MAPREDUCE-ReducerSlowTask: slow reduce task.
MAPREDUCE-ReducerTaskGC:ReducerTaskGC
MAPREDUCE-SchedulingDelay: scheduling delay.
SPARK-CpuWaste: CPU resource waste.
SPARK-DataSkew: data skew.
SPARK-ExecutorGC:ExecutorGC
SPARK-MemExceeded: peak memory exceeded.
SPARK-MemWaste: Memory resource waste.
SPARK-ScheduleOverhead:ScheduleOverhead
SPARK-ScheduleSkew: scheduling skew.
SPARK-SlowTask: slow task.
TEZ-DataSkew: data skew.
TEZ-MapperDataSkew: Map data skew.
TEZ-ReducerDataSkew: Reduce data skew.
TEZ-TezMemWaste: Memory resource waste.
TEZ-TezSlowTask: slow task.
TEZ-TezTaskGC:TasksGC
         * @type {string || null}
         */
        this.RuleID = null;

        /**
         * Insight rule name. Refer to the description of RuleID.
         * @type {string || null}
         */
        this.RuleName = null;

        /**
         * Insight rules interpretation.
         * @type {string || null}
         */
        this.RuleExplain = null;

        /**
         * Details.
         * @type {string || null}
         */
        this.Detail = null;

        /**
         * Recommended message.
         * @type {string || null}
         */
        this.Suggestion = null;

        /**
         * Anomaly metrics measure insight severity. Higher values indicate greater severity within the same insight category. Metrics across different insight types cannot be meaningfully compared.
         * @type {number || null}
         */
        this.Value = null;

        /**
         * Scheduling task execution ID.
         * @type {string || null}
         */
        this.ScheduleTaskExecID = null;

        /**
         * Scheduling flow, DAG.
         * @type {string || null}
         */
        this.ScheduleFlowName = null;

        /**
         * A Task node in the scheduling flow.
         * @type {string || null}
         */
        this.ScheduleTaskName = null;

        /**
         * Core configurations for Yarn tasks.
         * @type {string || null}
         */
        this.JobConf = null;

        /**
         * Insight structure information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Context = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ID = 'ID' in params ? params.ID : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.RuleID = 'RuleID' in params ? params.RuleID : null;
        this.RuleName = 'RuleName' in params ? params.RuleName : null;
        this.RuleExplain = 'RuleExplain' in params ? params.RuleExplain : null;
        this.Detail = 'Detail' in params ? params.Detail : null;
        this.Suggestion = 'Suggestion' in params ? params.Suggestion : null;
        this.Value = 'Value' in params ? params.Value : null;
        this.ScheduleTaskExecID = 'ScheduleTaskExecID' in params ? params.ScheduleTaskExecID : null;
        this.ScheduleFlowName = 'ScheduleFlowName' in params ? params.ScheduleFlowName : null;
        this.ScheduleTaskName = 'ScheduleTaskName' in params ? params.ScheduleTaskName : null;
        this.JobConf = 'JobConf' in params ? params.JobConf : null;
        this.Context = 'Context' in params ? params.Context : null;

    }
}

/**
 * Price details by node, used for creating the cluster price list
 * @class
 */
class NodeDetailPriceResult extends  AbstractModel {
    constructor(){
        super();

        /**
         * Node type: Master, Core, Task, Common, Router, and MySQL.
         * @type {string || null}
         */
        this.NodeType = null;

        /**
         * Price details by node part
         * @type {Array.<PartDetailPriceItem> || null}
         */
        this.PartDetailPrice = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NodeType = 'NodeType' in params ? params.NodeType : null;

        if (params.PartDetailPrice) {
            this.PartDetailPrice = new Array();
            for (let z in params.PartDetailPrice) {
                let obj = new PartDetailPriceItem();
                obj.deserialize(params.PartDetailPrice[z]);
                this.PartDetailPrice.push(obj);
            }
        }

    }
}

/**
 * Resource queried for price
 * @class
 */
class PriceResource extends  AbstractModel {
    constructor(){
        super();

        /**
         * Required specifications.
         * @type {string || null}
         */
        this.Spec = null;

        /**
         * Hard disk type.
         * @type {number || null}
         */
        this.StorageType = null;

        /**
         * Hard disk type.
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * System disk size.
         * @type {number || null}
         */
        this.RootSize = null;

        /**
         * Memory size.
         * @type {number || null}
         */
        this.MemSize = null;

        /**
         * Number of cores.
         * @type {number || null}
         */
        this.Cpu = null;

        /**
         * Hard disk size.
         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * List of cloud disks.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<MultiDisk> || null}
         */
        this.MultiDisks = null;

        /**
         * Number of disks.
         * @type {number || null}
         */
        this.DiskCnt = null;

        /**
         * Specifications.
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * Tag
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Number of disks.
         * @type {number || null}
         */
        this.DiskNum = null;

        /**
         * Number of local disks.
         * @type {number || null}
         */
        this.LocalDiskNum = null;

        /**
         * GPU information.
         * @type {string || null}
         */
        this.GpuDesc = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Spec = 'Spec' in params ? params.Spec : null;
        this.StorageType = 'StorageType' in params ? params.StorageType : null;
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.RootSize = 'RootSize' in params ? params.RootSize : null;
        this.MemSize = 'MemSize' in params ? params.MemSize : null;
        this.Cpu = 'Cpu' in params ? params.Cpu : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;

        if (params.MultiDisks) {
            this.MultiDisks = new Array();
            for (let z in params.MultiDisks) {
                let obj = new MultiDisk();
                obj.deserialize(params.MultiDisks[z]);
                this.MultiDisks.push(obj);
            }
        }
        this.DiskCnt = 'DiskCnt' in params ? params.DiskCnt : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.DiskNum = 'DiskNum' in params ? params.DiskNum : null;
        this.LocalDiskNum = 'LocalDiskNum' in params ? params.LocalDiskNum : null;
        this.GpuDesc = 'GpuDesc' in params ? params.GpuDesc : null;

    }
}

/**
 * Tag
 * @class
 */
class Tag extends  AbstractModel {
    constructor(){
        super();

        /**
         * Tag key
         * @type {string || null}
         */
        this.TagKey = null;

        /**
         * Tag value
         * @type {string || null}
         */
        this.TagValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TagKey = 'TagKey' in params ? params.TagKey : null;
        this.TagValue = 'TagValue' in params ? params.TagValue : null;

    }
}

/**
 * DescribeKyuubiQueryInfo response structure.
 * @class
 */
class DescribeKyuubiQueryInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number, which is used for pagination query.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Kyuubi information list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<KyuubiQueryInfo> || null}
         */
        this.KyuubiQueryInfoList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.KyuubiQueryInfoList) {
            this.KyuubiQueryInfoList = new Array();
            for (let z in params.KyuubiQueryInfoList) {
                let obj = new KyuubiQueryInfo();
                obj.deserialize(params.KyuubiQueryInfoList[z]);
                this.KyuubiQueryInfoList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * TerminateSLInstance request structure.
 * @class
 */
class TerminateSLInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance unique identifier (string).
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * ConvertPreToPostCluster response structure.
 * @class
 */
class ConvertPreToPostClusterResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Mapping of cluster ID and process ID
 * @class
 */
class ClusterIDToFlowID extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID.
         * @type {string || null}
         */
        this.ClusterId = null;

        /**
         * Flow ID.
         * @type {number || null}
         */
        this.FlowId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ClusterId = 'ClusterId' in params ? params.ClusterId : null;
        this.FlowId = 'FlowId' in params ? params.FlowId : null;

    }
}

/**
 * Returned cluster list sample
 * @class
 */
class EmrListInstance extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.ClusterId = null;

        /**
         * Common status: cluster in production, cluster running, cluster creating, cluster closed, and cluster deleted.
         * @type {string || null}
         */
        this.StatusDesc = null;

        /**
         * Cluster name
         * @type {string || null}
         */
        this.ClusterName = null;

        /**
         * Cluster region
         * @type {number || null}
         */
        this.ZoneId = null;

        /**
         * User APPID
         * @type {number || null}
         */
        this.AppId = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.AddTime = null;

        /**
         * Running time
         * @type {string || null}
         */
        this.RunTime = null;

        /**
         * Cluster IP
         * @type {string || null}
         */
        this.MasterIp = null;

        /**
         * Cluster version
         * @type {string || null}
         */
        this.EmrVersion = null;

        /**
         * Cluster billing mode
         * @type {number || null}
         */
        this.ChargeType = null;

        /**
         * EMR ID
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Product ID.
         * @type {number || null}
         */
        this.ProductId = null;

        /**
         * Project ID.
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * Region.
         * @type {number || null}
         */
        this.RegionId = null;

        /**
         * Subnet ID.
         * @type {number || null}
         */
        this.SubnetId = null;

        /**
         * Network ID.
         * @type {number || null}
         */
        this.VpcId = null;

        /**
         * Region.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Status code. Valid values: -2 (cluster deleted), -1 (cluster closed), 0 (cluster in production), 2 (cluster running), 3 (cluster creating).
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Instance tag
Note: This field may return `null`, indicating that no valid value can be obtained.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Alarm information.
         * @type {string || null}
         */
        this.AlarmInfo = null;

        /**
         * Whether it is a Woodpecker cluster.
         * @type {number || null}
         */
        this.IsWoodpeckerCluster = null;

        /**
         * VPC name in Chinese.
         * @type {string || null}
         */
        this.VpcName = null;

        /**
         * Subnet in Chinese.
         * @type {string || null}
         */
        this.SubnetName = null;

        /**
         * String VpcId.
         * @type {string || null}
         */
        this.UniqVpcId = null;

        /**
         * String subnet.
         * @type {string || null}
         */
        this.UniqSubnetId = null;

        /**
         * Cluster type.
         * @type {string || null}
         */
        this.ClusterClass = null;

        /**
         * Whether it is a cross-AZ cluster.
         * @type {boolean || null}
         */
        this.IsMultiZoneCluster = null;

        /**
         * Whether it is a cluster created by a cluster CVM.
         * @type {boolean || null}
         */
        this.IsHandsCluster = null;

        /**
         * Client component information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<SoftDependInfo> || null}
         */
        this.OutSideSoftInfo = null;

        /**
         * Whether the current cluster's scenarios support external clients.
         * @type {boolean || null}
         */
        this.IsSupportOutsideCluster = null;

        /**
         * Whether the cluster is used in a dedicated cluster scenario.
         * @type {boolean || null}
         */
        this.IsDedicatedCluster = null;

        /**
         * Cluster supports for cloning.
         * @type {boolean || null}
         */
        this.IsSupportClone = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ClusterId = 'ClusterId' in params ? params.ClusterId : null;
        this.StatusDesc = 'StatusDesc' in params ? params.StatusDesc : null;
        this.ClusterName = 'ClusterName' in params ? params.ClusterName : null;
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.AppId = 'AppId' in params ? params.AppId : null;
        this.AddTime = 'AddTime' in params ? params.AddTime : null;
        this.RunTime = 'RunTime' in params ? params.RunTime : null;
        this.MasterIp = 'MasterIp' in params ? params.MasterIp : null;
        this.EmrVersion = 'EmrVersion' in params ? params.EmrVersion : null;
        this.ChargeType = 'ChargeType' in params ? params.ChargeType : null;
        this.Id = 'Id' in params ? params.Id : null;
        this.ProductId = 'ProductId' in params ? params.ProductId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.RegionId = 'RegionId' in params ? params.RegionId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.Status = 'Status' in params ? params.Status : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.AlarmInfo = 'AlarmInfo' in params ? params.AlarmInfo : null;
        this.IsWoodpeckerCluster = 'IsWoodpeckerCluster' in params ? params.IsWoodpeckerCluster : null;
        this.VpcName = 'VpcName' in params ? params.VpcName : null;
        this.SubnetName = 'SubnetName' in params ? params.SubnetName : null;
        this.UniqVpcId = 'UniqVpcId' in params ? params.UniqVpcId : null;
        this.UniqSubnetId = 'UniqSubnetId' in params ? params.UniqSubnetId : null;
        this.ClusterClass = 'ClusterClass' in params ? params.ClusterClass : null;
        this.IsMultiZoneCluster = 'IsMultiZoneCluster' in params ? params.IsMultiZoneCluster : null;
        this.IsHandsCluster = 'IsHandsCluster' in params ? params.IsHandsCluster : null;

        if (params.OutSideSoftInfo) {
            this.OutSideSoftInfo = new Array();
            for (let z in params.OutSideSoftInfo) {
                let obj = new SoftDependInfo();
                obj.deserialize(params.OutSideSoftInfo[z]);
                this.OutSideSoftInfo.push(obj);
            }
        }
        this.IsSupportOutsideCluster = 'IsSupportOutsideCluster' in params ? params.IsSupportOutsideCluster : null;
        this.IsDedicatedCluster = 'IsDedicatedCluster' in params ? params.IsDedicatedCluster : null;
        this.IsSupportClone = 'IsSupportClone' in params ? params.IsSupportClone : null;

    }
}

/**
 * InquiryPriceScaleOutInstance request structure.
 * @class
 */
class InquiryPriceScaleOutInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Time unit of scale-out. Valid value:
<li>s: Second. When `PayMode` is 0, `TimeUnit` can only be `s`.</li>
         * @type {string || null}
         */
        this.TimeUnit = null;

        /**
         * Time span of scale-out, which needs to be used together with `TimeUnit`.
<li>When `PayMode` is 0, `TimeSpan` can only be 3,600.</li>
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         * ID of the AZ where an instance resides.
         * @type {number || null}
         */
        this.ZoneId = null;

        /**
         * Instance billing mode. Valid value:
<li>0: Pay-as-you-go.</li>
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Number of core nodes to be added.
         * @type {number || null}
         */
        this.CoreCount = null;

        /**
         * Number of task nodes to be added.
         * @type {number || null}
         */
        this.TaskCount = null;

        /**
         * Currency.
         * @type {string || null}
         */
        this.Currency = null;

        /**
         * Number of router nodes to be added.
         * @type {number || null}
         */
        this.RouterCount = null;

        /**
         * Number of master nodes to be added.
         * @type {number || null}
         */
        this.MasterCount = null;

        /**
         * The type can be ComputeResource, EMR, or a default value. The default value is EMR.
         * @type {string || null}
         */
        this.ResourceBaseType = null;

        /**
         * Computing resource ID.
         * @type {string || null}
         */
        this.ComputeResourceId = null;

        /**
         * Scale-out resource type.
         * @type {string || null}
         */
        this.HardwareResourceType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TimeUnit = 'TimeUnit' in params ? params.TimeUnit : null;
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.CoreCount = 'CoreCount' in params ? params.CoreCount : null;
        this.TaskCount = 'TaskCount' in params ? params.TaskCount : null;
        this.Currency = 'Currency' in params ? params.Currency : null;
        this.RouterCount = 'RouterCount' in params ? params.RouterCount : null;
        this.MasterCount = 'MasterCount' in params ? params.MasterCount : null;
        this.ResourceBaseType = 'ResourceBaseType' in params ? params.ResourceBaseType : null;
        this.ComputeResourceId = 'ComputeResourceId' in params ? params.ComputeResourceId : null;
        this.HardwareResourceType = 'HardwareResourceType' in params ? params.HardwareResourceType : null;

    }
}

/**
 * Price details by AZ, used for creating the cluster price list
 * @class
 */
class ZoneDetailPriceResult extends  AbstractModel {
    constructor(){
        super();

        /**
         * Availability zone ID.
         * @type {string || null}
         */
        this.ZoneId = null;

        /**
         * Price details by node
         * @type {Array.<NodeDetailPriceResult> || null}
         */
        this.NodeDetailPrice = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;

        if (params.NodeDetailPrice) {
            this.NodeDetailPrice = new Array();
            for (let z in params.NodeDetailPrice) {
                let obj = new NodeDetailPriceResult();
                obj.deserialize(params.NodeDetailPrice[z]);
                this.NodeDetailPrice.push(obj);
            }
        }

    }
}

/**
 * AddUsersForUserManager response structure.
 * @class
 */
class AddUsersForUserManagerResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The user list that is successfully added
Note: This field may return `null`, indicating that no valid value can be obtained.
         * @type {Array.<string> || null}
         */
        this.SuccessUserList = null;

        /**
         * The user list that is not successfully added
Note: This field may return `null`, indicating that no valid value can be obtained.
         * @type {Array.<string> || null}
         */
        this.FailedUserList = null;

        /**
         * Flow ID. If the flow ID is larger than 0, it means that the flow is launched; if the flow ID is equal to 0, it means that no flow is launched.
         * @type {number || null}
         */
        this.FlowId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SuccessUserList = 'SuccessUserList' in params ? params.SuccessUserList : null;
        this.FailedUserList = 'FailedUserList' in params ? params.FailedUserList : null;
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Search field
 * @class
 */
class SearchItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Searchable type.
         * @type {string || null}
         */
        this.SearchType = null;

        /**
         * Searchable value.
         * @type {string || null}
         */
        this.SearchValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SearchType = 'SearchType' in params ? params.SearchType : null;
        this.SearchValue = 'SearchValue' in params ? params.SearchValue : null;

    }
}

/**
 * DescribeResourceScheduleDiffDetail response structure.
 * @class
 */
class DescribeResourceScheduleDiffDetailResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Details of change items.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DiffDetail> || null}
         */
        this.Details = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Details) {
            this.Details = new Array();
            for (let z in params.Details) {
                let obj = new DiffDetail();
                obj.deserialize(params.Details[z]);
                this.Details.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeYarnQueue response structure.
 * @class
 */
class DescribeYarnQueueResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queue information. It is a JSON string into which an object is converted. The corresponding Golang structure is as follows. For example, the first field `Name` of `QueueWithConfigSetForFairScheduler: ```Name                         string                               `json:"name"` //queue name ```  - `Name: field name - `string`: field type - `json:"name`:  indicates the corresponding `json key` during serialization/deserialization. Below, `json key` is used for referring.- `//`: the following comment content corresponds to the Name field seen on the page. Fields with types starting with `*` indicate that the value may be null under JSON specifications. Different languages need to be received through a type that can express null, such as Java's wrapper types. Fields with types starting with `[]` indicate an array type, which is used when `json key` calls `ModifyYarnQueueV2` API. - fair scheduler```type QueueWithConfigSetForFairScheduler struct {	Name                         string                               `json:"name"` //queue name MyId                         string                  `json:"myId"` // queue id, used for editing, deleting, and cloning	ParentId                     string                  `json:"parentId"`  // Parent queue Id	Type                         *string                              `json:"type"` // queue affinity. Parent or empty. Setting to be a parent or empty can be performed only when it is confirmed that a queue is a parent queue and has no subqueues. The queue is normally used to support the placement policy nestedUserQueue	AclSubmitApps                *AclForYarnQueue                     `json:"aclSubmitApps"` // submission access control	AclAdministerApps            *AclForYarnQueue                     `json:"aclAdministerApps"` // management access control	MinSharePreemptionTimeout    *int                                 `json:"minSharePreemptionTimeout"` // minimum share preemption timeout period	FairSharePreemptionTimeout   *int                                 `json:"fairSharePreemptionTimeout"` // fair share preemption timeout period	FairSharePreemptionThreshold *float32                             `json:"fairSharePreemptionThreshold"` // fair share preemption threshold. Value range (0, 1]	AllowPreemptionFrom          *bool                                `json:"allowPreemptionFrom"`                                        // preemption mode	SchedulingPolicy             *string                              `json:"schedulingPolicy"`  // scheduling policy with the valid values of drf, fair, and fifo	IsDefault                    *bool                                `json:"isDefault"` // whether it is the root.default queue	IsRoot                       *bool                                `json:"isRoot"` // whether it is the root queue	ConfigSets                   []ConfigSetForFairScheduler          `json:"configSets"` // configuration set settings	Children                     []QueueWithConfigSetForFairScheduler `json:"queues"` // subqueue information. recursive}type AclForYarnQueue struct {	User  *string `json:"user"` //username	Group *string `json:"group"`//group name}type ConfigSetForFairScheduler struct {	Name              string        `json:"name"` // configuration set name	MinResources      *YarnResource `json:"minResources"` // minimum resource amount	MaxResources      *YarnResource `json:"maxResources"` // maximum resource amount	MaxChildResources *YarnResource `json:"maxChildResources"` //.The maximum quantity of resources that can be allocated to undefined subqueues	MaxRunningApps    *int          `json:"maxRunningApps"` // the maximum number of apps that can run concurrently	Weight            *float32      `json:"weight"`                   // Weight	MaxAMShare        *float32      `json:"maxAMShare"` // App Master maximum share}type YarnResource struct {	Vcores *int `json:"vcores"`	Memory *int `json:"memory"`	Type *string `json:"type"` // when the value is `percent`, it indicates usage as a percentage, otherwise an absolute value is used indeed}```- Capacity scheduler```type QueueForCapacitySchedulerV3 struct {	Name                       string                `json:"name"` // queue name	MyId                       string                `json:"myId"` // queue id, used in the case of editing, deleting, or cloning	ParentId                   string                `json:"parentId"` // parent queue id 	Configs                    []ConfigForCapacityV3 `json:"configs"` //configuration set settings	State                      *string         `json:"state"` // resource pool status	DefaultNodeLabelExpression *string               `json:"default-node-label-expression"` // default tag expression	AclSubmitApps              *AclForYarnQueue      `json:"acl_submit_applications"` // submission access control 	AclAdminQueue              *AclForYarnQueue      `json:"acl_administer_queue"` //management access control	MaxAllocationMB *int32 `json:"maximum-allocation-mb"` // maximum Memory allocated to Container	MaxAllocationVcores *int32                         `json:"maximum-allocation-vcores"` // the maximum number of Vcores for Container	IsDefault           *bool                          `json:"isDefault"`// whether it is the root.default queue	IsRoot              *bool                          `json:"isRoot"` // whether it is the root queue	Queues              []*QueueForCapacitySchedulerV3 `json:"queues"`//subqueue information. Recursive}type ConfigForCapacityV3 struct {	Name                string          `json:"configName"` // configuration set name	Labels              []CapacityLabel `json:"labels"` // tag information	MinUserLimitPercent *int32          `json:"minimum-user-limit-percent"` // minimum user capacity	UserLimitFactor     *float32        `json:"user-limit-factor" valid:"rangeExcludeLeft(0|)"`  // user resource factor	MaxApps *int32 `json:"maximum-applications" valid:"rangeExcludeLeft(0|)"` // the maximum number of applications Max-Applications	MaxAmPercent               *float32 `json:"maximum-am-resource-percent"` // the maximum AM ratio	DefaultApplicationPriority *int32   `json:"default-application-priority"` // resource pool priority}type CapacityLabel struct {	Name        string   `json:"labelName"`	Capacity    *float32 `json:"capacity"`  // capacity MaxCapacity *float32 `json:"maximum-capacity"` //maximum capacity}type AclForYarnQueue struct {	User  *string `json:"user"` //username	Group *string `json:"group"`//group name}```.
         * @type {string || null}
         */
        this.Queue = null;

        /**
         * Version
         * @type {string || null}
         */
        this.Version = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Queue = 'Queue' in params ? params.Queue : null;
        this.Version = 'Version' in params ? params.Version : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Cluster node topology information
 * @class
 */
class TopologyInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Availability zone ID.
         * @type {number || null}
         */
        this.ZoneId = null;

        /**
         * Availability information.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Subnet information
Note: This field may return `null`, indicating that no valid value can be obtained.
         * @type {Array.<SubnetInfo> || null}
         */
        this.SubnetInfoList = null;

        /**
         * Node information
Note: This field may return `null`, indicating that no valid value can be obtained.
         * @type {Array.<ShortNodeInfo> || null}
         */
        this.NodeInfoList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.Zone = 'Zone' in params ? params.Zone : null;

        if (params.SubnetInfoList) {
            this.SubnetInfoList = new Array();
            for (let z in params.SubnetInfoList) {
                let obj = new SubnetInfo();
                obj.deserialize(params.SubnetInfoList[z]);
                this.SubnetInfoList.push(obj);
            }
        }

        if (params.NodeInfoList) {
            this.NodeInfoList = new Array();
            for (let z in params.NodeInfoList) {
                let obj = new ShortNodeInfo();
                obj.deserialize(params.NodeInfoList[z]);
                this.NodeInfoList.push(obj);
            }
        }

    }
}

/**
 * Scheduling task details
 * @class
 */
class SchedulerTaskDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Steps.
         * @type {string || null}
         */
        this.Step = null;

        /**
         * Progress.
         * @type {string || null}
         */
        this.Progress = null;

        /**
         * Failure information.
         * @type {string || null}
         */
        this.FailReason = null;

        /**
         * ID used to obtain details.
         * @type {number || null}
         */
        this.JobId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Step = 'Step' in params ? params.Step : null;
        this.Progress = 'Progress' in params ? params.Progress : null;
        this.FailReason = 'FailReason' in params ? params.FailReason : null;
        this.JobId = 'JobId' in params ? params.JobId : null;

    }
}

/**
 * ModifyUserGroup request structure.
 * @class
 */
class ModifyUserGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * User information list.
         * @type {Array.<string> || null}
         */
        this.Users = null;

        /**
         * User primary group. The CVM cluster is a required parameter, while the TKE cluster is optional.
         * @type {string || null}
         */
        this.UserGroup = null;

        /**
         * User subgroup.
         * @type {Array.<string> || null}
         */
        this.Groups = null;

        /**
         * Remarks.
         * @type {string || null}
         */
        this.Remark = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Users = 'Users' in params ? params.Users : null;
        this.UserGroup = 'UserGroup' in params ? params.UserGroup : null;
        this.Groups = 'Groups' in params ? params.Groups : null;
        this.Remark = 'Remark' in params ? params.Remark : null;

    }
}

/**
 * Resource details
 * @class
 */
class NodeResourceSpec extends  AbstractModel {
    constructor(){
        super();

        /**
         * specifications type, such as S2.MEDIUM8.
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * The system disk, which can be up to 1 PCS.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DiskSpecInfo> || null}
         */
        this.SystemDisk = null;

        /**
         * The list of tags to be bound.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * The cloud data disk, which can be up to 15 PCS.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DiskSpecInfo> || null}
         */
        this.DataDisk = null;

        /**
         * The local data disk.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DiskSpecInfo> || null}
         */
        this.LocalDataDisk = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;

        if (params.SystemDisk) {
            this.SystemDisk = new Array();
            for (let z in params.SystemDisk) {
                let obj = new DiskSpecInfo();
                obj.deserialize(params.SystemDisk[z]);
                this.SystemDisk.push(obj);
            }
        }

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }

        if (params.DataDisk) {
            this.DataDisk = new Array();
            for (let z in params.DataDisk) {
                let obj = new DiskSpecInfo();
                obj.deserialize(params.DataDisk[z]);
                this.DataDisk.push(obj);
            }
        }

        if (params.LocalDataDisk) {
            this.LocalDataDisk = new Array();
            for (let z in params.LocalDataDisk) {
                let obj = new DiskSpecInfo();
                obj.deserialize(params.LocalDataDisk[z]);
                this.LocalDataDisk.push(obj);
            }
        }

    }
}

/**
 * AddMetricScaleStrategy request structure.
 * @class
 */
class AddMetricScaleStrategyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * 1 indicates scaling by load rules. 2 indicates scaling by time rules. This parameter is required and should match the following rule policy.
         * @type {number || null}
         */
        this.StrategyType = null;

        /**
         * Load-based scale-out rules.
         * @type {LoadAutoScaleStrategy || null}
         */
        this.LoadAutoScaleStrategy = null;

        /**
         * Rule for time-based scaling
         * @type {TimeAutoScaleStrategy || null}
         */
        this.TimeAutoScaleStrategy = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StrategyType = 'StrategyType' in params ? params.StrategyType : null;

        if (params.LoadAutoScaleStrategy) {
            let obj = new LoadAutoScaleStrategy();
            obj.deserialize(params.LoadAutoScaleStrategy)
            this.LoadAutoScaleStrategy = obj;
        }

        if (params.TimeAutoScaleStrategy) {
            let obj = new TimeAutoScaleStrategy();
            obj.deserialize(params.TimeAutoScaleStrategy)
            this.TimeAutoScaleStrategy = obj;
        }

    }
}

/**
 * DeleteNodeResourceConfig request structure.
 * @class
 */
class DeleteNodeResourceConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Node configuration ID.
         * @type {number || null}
         */
        this.ResourceConfigId = null;

        /**
         * Node type: CORE, TASK, and ROUTER.
         * @type {string || null}
         */
        this.ResourceType = null;

        /**
         * The type can be ComputeResource, EMR, or a default value. The default value is EMR.
         * @type {string || null}
         */
        this.ResourceBaseType = null;

        /**
         * Computing resource ID.
         * @type {string || null}
         */
        this.ComputeResourceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ResourceConfigId = 'ResourceConfigId' in params ? params.ResourceConfigId : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.ResourceBaseType = 'ResourceBaseType' in params ? params.ResourceBaseType : null;
        this.ComputeResourceId = 'ComputeResourceId' in params ? params.ComputeResourceId : null;

    }
}

/**
 * EMR product configuration
 * @class
 */
class EmrProductConfigOutter extends  AbstractModel {
    constructor(){
        super();

        /**
         * Software information
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.SoftInfo = null;

        /**
         * Number of master nodes
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MasterNodeSize = null;

        /**
         * Number of core nodes
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CoreNodeSize = null;

        /**
         * Number of task nodes
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TaskNodeSize = null;

        /**
         * Number of common nodes
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ComNodeSize = null;

        /**
         * Master node resource
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {OutterResource || null}
         */
        this.MasterResource = null;

        /**
         * Core node resource
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {OutterResource || null}
         */
        this.CoreResource = null;

        /**
         * Task node resource
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {OutterResource || null}
         */
        this.TaskResource = null;

        /**
         * Common node resource
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {OutterResource || null}
         */
        this.ComResource = null;

        /**
         * Whether COS is used
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.OnCos = null;

        /**
         * Billing mode
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ChargeType = null;

        /**
         * Number of router nodes
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RouterNodeSize = null;

        /**
         * Whether HA is supported
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.SupportHA = null;

        /**
         * Whether secure mode is supported
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.SecurityOn = null;

        /**
         * Initial security group ID of the cluster.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SecurityGroup = null;

        /**
         * Whether to enable CBS encryption
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CbsEncrypt = null;

        /**
         * Custom application role
Note: this field may return `null`, indicating that no valid value can be obtained.
         * @type {string || null}
         */
        this.ApplicationRole = null;

        /**
         * Security group ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.SecurityGroups = null;

        /**
         * SSH key ID
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PublicKeyId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SoftInfo = 'SoftInfo' in params ? params.SoftInfo : null;
        this.MasterNodeSize = 'MasterNodeSize' in params ? params.MasterNodeSize : null;
        this.CoreNodeSize = 'CoreNodeSize' in params ? params.CoreNodeSize : null;
        this.TaskNodeSize = 'TaskNodeSize' in params ? params.TaskNodeSize : null;
        this.ComNodeSize = 'ComNodeSize' in params ? params.ComNodeSize : null;

        if (params.MasterResource) {
            let obj = new OutterResource();
            obj.deserialize(params.MasterResource)
            this.MasterResource = obj;
        }

        if (params.CoreResource) {
            let obj = new OutterResource();
            obj.deserialize(params.CoreResource)
            this.CoreResource = obj;
        }

        if (params.TaskResource) {
            let obj = new OutterResource();
            obj.deserialize(params.TaskResource)
            this.TaskResource = obj;
        }

        if (params.ComResource) {
            let obj = new OutterResource();
            obj.deserialize(params.ComResource)
            this.ComResource = obj;
        }
        this.OnCos = 'OnCos' in params ? params.OnCos : null;
        this.ChargeType = 'ChargeType' in params ? params.ChargeType : null;
        this.RouterNodeSize = 'RouterNodeSize' in params ? params.RouterNodeSize : null;
        this.SupportHA = 'SupportHA' in params ? params.SupportHA : null;
        this.SecurityOn = 'SecurityOn' in params ? params.SecurityOn : null;
        this.SecurityGroup = 'SecurityGroup' in params ? params.SecurityGroup : null;
        this.CbsEncrypt = 'CbsEncrypt' in params ? params.CbsEncrypt : null;
        this.ApplicationRole = 'ApplicationRole' in params ? params.ApplicationRole : null;
        this.SecurityGroups = 'SecurityGroups' in params ? params.SecurityGroups : null;
        this.PublicKeyId = 'PublicKeyId' in params ? params.PublicKeyId : null;

    }
}

/**
 * VPC parameters
 * @class
 */
class VPCSettings extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC ID
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Subnet ID
         * @type {string || null}
         */
        this.SubnetId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;

    }
}

/**
 * Dynamically generated change details.
 * @class
 */
class DiffHeader extends  AbstractModel {
    constructor(){
        super();

        /**
         * Name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * ID, which is used by the front end.
         * @type {string || null}
         */
        this.Id = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Id = 'Id' in params ? params.Id : null;

    }
}

/**
 * CreateGroupsSTD request structure.
 * @class
 */
class CreateGroupsSTDRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster name.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Batch user group information.
         * @type {Array.<GroupInfo> || null}
         */
        this.Groups = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.Groups) {
            this.Groups = new Array();
            for (let z in params.Groups) {
                let obj = new GroupInfo();
                obj.deserialize(params.Groups[z]);
                this.Groups.push(obj);
            }
        }

    }
}

/**
 * ConvertPreToPostCluster request structure.
 * @class
 */
class ConvertPreToPostClusterRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Non-reentrant identifier (5-minute window). Order identifier.
         * @type {string || null}
         */
        this.ClientToken = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ClientToken = 'ClientToken' in params ? params.ClientToken : null;

    }
}

/**
 * DescribeSparkQueries response structure.
 * @class
 */
class DescribeSparkQueriesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * Result list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<SparkQuery> || null}
         */
        this.Results = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;

        if (params.Results) {
            this.Results = new Array();
            for (let z in params.Results) {
                let obj = new SparkQuery();
                obj.deserialize(params.Results[z]);
                this.Results.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Location information of cluster instance
 * @class
 */
class Placement extends  AbstractModel {
    constructor(){
        super();

        /**
         * The ID of the availability zone where the instance resides, such as `ap-guangzhou-1`. You can call the [DescribeZones](https://intl.cloud.tencent.com/document/product/213/15707?from_cn_redirect=1) API and obtain this ID from the `Zone` field in the response.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Project ID of the instance. If no ID is passed in, the default project ID is used.
         * @type {number || null}
         */
        this.ProjectId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;

    }
}

/**
 * FlowParam process parameters.
 * @class
 */
class FlowParam extends  AbstractModel {
    constructor(){
        super();

        /**
         * Process parameter key.
TraceId: Query by TraceId.
FlowId: Query by FlowId.
         * @type {string || null}
         */
        this.FKey = null;

        /**
         * Parameter value
         * @type {string || null}
         */
        this.FValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FKey = 'FKey' in params ? params.FKey : null;
        this.FValue = 'FValue' in params ? params.FValue : null;

    }
}

/**
 * DescribeAutoScaleStrategies response structure.
 * @class
 */
class DescribeAutoScaleStrategiesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Load-based scaling rules

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<LoadAutoScaleStrategy> || null}
         */
        this.LoadAutoScaleStrategies = null;

        /**
         * Scaling rules by time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<TimeAutoScaleStrategy> || null}
         */
        this.TimeBasedAutoScaleStrategies = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.LoadAutoScaleStrategies) {
            this.LoadAutoScaleStrategies = new Array();
            for (let z in params.LoadAutoScaleStrategies) {
                let obj = new LoadAutoScaleStrategy();
                obj.deserialize(params.LoadAutoScaleStrategies[z]);
                this.LoadAutoScaleStrategies.push(obj);
            }
        }

        if (params.TimeBasedAutoScaleStrategies) {
            this.TimeBasedAutoScaleStrategies = new Array();
            for (let z in params.TimeBasedAutoScaleStrategies) {
                let obj = new TimeAutoScaleStrategy();
                obj.deserialize(params.TimeBasedAutoScaleStrategies[z]);
                this.TimeBasedAutoScaleStrategies.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeNodeDataDisks request structure.
 * @class
 */
class DescribeNodeDataDisksRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of the EMR cluster instance.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * ID list of node CVM instances.
         * @type {Array.<string> || null}
         */
        this.CvmInstanceIds = null;

        /**
         * Filter criteria for querying cloud disks.
         * @type {Array.<Filters> || null}
         */
        this.Filters = null;

        /**
         * Fuzzy search.
         * @type {string || null}
         */
        this.InnerSearch = null;

        /**
         * Number of items returned per page. The default value is 100, and the maximum value is 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Data offset.
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.CvmInstanceIds = 'CvmInstanceIds' in params ? params.CvmInstanceIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filters();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.InnerSearch = 'InnerSearch' in params ? params.InnerSearch : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * Parameters used for stopping services.
 * @class
 */
class StopParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * Security mode: safe.
Default mode: default.
         * @type {string || null}
         */
        this.StopPolicy = null;

        /**
         * Thread Count
         * @type {number || null}
         */
        this.ThreadCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StopPolicy = 'StopPolicy' in params ? params.StopPolicy : null;
        this.ThreadCount = 'ThreadCount' in params ? params.ThreadCount : null;

    }
}

/**
 * Shared component information
 * @class
 */
class DependService extends  AbstractModel {
    constructor(){
        super();

        /**
         * The shared component name.
         * @type {string || null}
         */
        this.ServiceName = null;

        /**
         * The cluster to which the shared component belongs.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * DescribeInspectionTaskResult request structure.
 * @class
 */
class DescribeInspectionTaskResultRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Type.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Start time.
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * End time.
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Page size.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Pagination offset.
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * InquiryPriceRenewInstance response structure.
 * @class
 */
class InquiryPriceRenewInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Original price.
         * @type {number || null}
         */
        this.OriginalCost = null;

        /**
         * Discounted price.
         * @type {number || null}
         */
        this.DiscountCost = null;

        /**
         * Time unit for instance renewal.
         * @type {string || null}
         */
        this.TimeUnit = null;

        /**
         * Duration of instance renewal.
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         * Price details.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<PriceDetail> || null}
         */
        this.PriceDetail = null;

        /**
         * Node renewal pricing list.
         * @type {Array.<NodeRenewPriceDetail> || null}
         */
        this.NodeRenewPriceDetails = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.OriginalCost = 'OriginalCost' in params ? params.OriginalCost : null;
        this.DiscountCost = 'DiscountCost' in params ? params.DiscountCost : null;
        this.TimeUnit = 'TimeUnit' in params ? params.TimeUnit : null;
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;

        if (params.PriceDetail) {
            this.PriceDetail = new Array();
            for (let z in params.PriceDetail) {
                let obj = new PriceDetail();
                obj.deserialize(params.PriceDetail[z]);
                this.PriceDetail.push(obj);
            }
        }

        if (params.NodeRenewPriceDetails) {
            this.NodeRenewPriceDetails = new Array();
            for (let z in params.NodeRenewPriceDetails) {
                let obj = new NodeRenewPriceDetail();
                obj.deserialize(params.NodeRenewPriceDetails[z]);
                this.NodeRenewPriceDetails.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * InquiryPriceCreateInstance response structure.
 * @class
 */
class InquiryPriceCreateInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Original price.
         * @type {number || null}
         */
        this.OriginalCost = null;

        /**
         * Discounted price.
         * @type {number || null}
         */
        this.DiscountCost = null;

        /**
         * Time unit of purchase instances. Valid values.
<li>s: seconds.</li>
         * @type {string || null}
         */
        this.TimeUnit = null;

        /**
         * Instance purchase duration.
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         * The price list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ZoneDetailPriceResult> || null}
         */
        this.PriceList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.OriginalCost = 'OriginalCost' in params ? params.OriginalCost : null;
        this.DiscountCost = 'DiscountCost' in params ? params.DiscountCost : null;
        this.TimeUnit = 'TimeUnit' in params ? params.TimeUnit : null;
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;

        if (params.PriceList) {
            this.PriceList = new Array();
            for (let z in params.PriceList) {
                let obj = new ZoneDetailPriceResult();
                obj.deserialize(params.PriceList[z]);
                this.PriceList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Subnet information
 * @class
 */
class SubnetInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Subnet information (name).
         * @type {string || null}
         */
        this.SubnetName = null;

        /**
         * Subnet information (ID).
         * @type {string || null}
         */
        this.SubnetId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SubnetName = 'SubnetName' in params ? params.SubnetName : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;

    }
}

/**
 * StartStopServiceOrMonitor request structure.
 * @class
 */
class StartStopServiceOrMonitorRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The cluster ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The operation type. Valid values:
<li>StartService: Start service</li>
<li>StopService: Stop service</li>
<li>StartMonitor: Start maintenance</li>
<li>StopMonitor: Stop maintenance</li>
<li>RestartService: Restart service. If this type is selected, "StrategyConfig" is required.</li>
         * @type {string || null}
         */
        this.OpType = null;

        /**
         * The operation scope.
         * @type {OpScope || null}
         */
        this.OpScope = null;

        /**
         * The operation policy.
         * @type {StrategyConfig || null}
         */
        this.StrategyConfig = null;

        /**
         * Parameters used for suspending services.
         * @type {StopParams || null}
         */
        this.StopParams = null;

        /**
         * This parameter is available only when OpType is <li>StopMonitor</li>. True indicates that the system enters the maintenance mode but still monitors processes without starting them.
         * @type {boolean || null}
         */
        this.KeepMonitorButNotRecoverProcess = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.OpType = 'OpType' in params ? params.OpType : null;

        if (params.OpScope) {
            let obj = new OpScope();
            obj.deserialize(params.OpScope)
            this.OpScope = obj;
        }

        if (params.StrategyConfig) {
            let obj = new StrategyConfig();
            obj.deserialize(params.StrategyConfig)
            this.StrategyConfig = obj;
        }

        if (params.StopParams) {
            let obj = new StopParams();
            obj.deserialize(params.StopParams)
            this.StopParams = obj;
        }
        this.KeepMonitorButNotRecoverProcess = 'KeepMonitorButNotRecoverProcess' in params ? params.KeepMonitorButNotRecoverProcess : null;

    }
}

/**
 * StarRocks query information.
 * @class
 */
class StarRocksQueryInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Submission IP address.
         * @type {string || null}
         */
        this.ClientIP = null;

        /**
         * Total CPU time (ns).
         * @type {number || null}
         */
        this.CPUCost = null;

        /**
         * Default DB.
         * @type {string || null}
         */
        this.DefaultDB = null;

        /**
         * End time.
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Execution IP address.
         * @type {string || null}
         */
        this.ExecutionIP = null;

        /**
         * Query ID.
         * @type {string || null}
         */
        this.QueryID = null;

        /**
         * Query type.
         * @type {string || null}
         */
        this.QueryType = null;

        /**
         * Total memory consumed (bytes).
         * @type {number || null}
         */
        this.MemCost = null;

        /**
         * CPU usage (ns) at the plan stage.
         * @type {number || null}
         */
        this.PlanCpuCosts = null;

        /**
         * Memory usage (bytes) at the plan stage.
         * @type {number || null}
         */
        this.PlanMemCosts = null;

        /**
         * Execution duration.
         * @type {number || null}
         */
        this.QueryTime = null;

        /**
         * Resource group.
         * @type {string || null}
         */
        this.ResourceGroup = null;

        /**
         * Number of rows obtained.
         * @type {number || null}
         */
        this.ReturnRows = null;

        /**
         * Scanned data volume (bytes).
         * @type {number || null}
         */
        this.ScanBytes = null;

        /**
         * Number of scanned rows.
         * @type {number || null}
         */
        this.ScanRows = null;

        /**
         * Start time.
         * @type {number || null}
         */
        this.BeginTime = null;

        /**
         * Execution status.
         * @type {string || null}
         */
        this.ExecutionState = null;

        /**
         * Execution statement.
         * @type {string || null}
         */
        this.ExecutionStatement = null;

        /**
         * User.
         * @type {string || null}
         */
        this.User = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ClientIP = 'ClientIP' in params ? params.ClientIP : null;
        this.CPUCost = 'CPUCost' in params ? params.CPUCost : null;
        this.DefaultDB = 'DefaultDB' in params ? params.DefaultDB : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.ExecutionIP = 'ExecutionIP' in params ? params.ExecutionIP : null;
        this.QueryID = 'QueryID' in params ? params.QueryID : null;
        this.QueryType = 'QueryType' in params ? params.QueryType : null;
        this.MemCost = 'MemCost' in params ? params.MemCost : null;
        this.PlanCpuCosts = 'PlanCpuCosts' in params ? params.PlanCpuCosts : null;
        this.PlanMemCosts = 'PlanMemCosts' in params ? params.PlanMemCosts : null;
        this.QueryTime = 'QueryTime' in params ? params.QueryTime : null;
        this.ResourceGroup = 'ResourceGroup' in params ? params.ResourceGroup : null;
        this.ReturnRows = 'ReturnRows' in params ? params.ReturnRows : null;
        this.ScanBytes = 'ScanBytes' in params ? params.ScanBytes : null;
        this.ScanRows = 'ScanRows' in params ? params.ScanRows : null;
        this.BeginTime = 'BeginTime' in params ? params.BeginTime : null;
        this.ExecutionState = 'ExecutionState' in params ? params.ExecutionState : null;
        this.ExecutionStatement = 'ExecutionStatement' in params ? params.ExecutionStatement : null;
        this.User = 'User' in params ? params.User : null;

    }
}

/**
 * DescribeHDFSStorageInfo request structure.
 * @class
 */
class DescribeHDFSStorageInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Query information obtainment start time (seconds).
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * Query information obtainment end time (seconds).
         * @type {number || null}
         */
        this.EndTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;

    }
}

/**
 * Overview data.
 * @class
 */
class OverviewMetricData extends  AbstractModel {
    constructor(){
        super();

        /**
         * Metric name.
         * @type {string || null}
         */
        this.Metric = null;

        /**
         * First data timestamp.
         * @type {number || null}
         */
        this.First = null;

        /**
         * Last data timestamp.
         * @type {number || null}
         */
        this.Last = null;

        /**
         * Sampling point time interval.
         * @type {number || null}
         */
        this.Interval = null;

        /**
         * Sampling point data.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.DataPoints = null;

        /**
         * Metric tags.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {MetricTags || null}
         */
        this.Tags = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Metric = 'Metric' in params ? params.Metric : null;
        this.First = 'First' in params ? params.First : null;
        this.Last = 'Last' in params ? params.Last : null;
        this.Interval = 'Interval' in params ? params.Interval : null;
        this.DataPoints = 'DataPoints' in params ? params.DataPoints : null;

        if (params.Tags) {
            let obj = new MetricTags();
            obj.deserialize(params.Tags)
            this.Tags = obj;
        }

    }
}

/**
 * ModifyYarnDeploy response structure.
 * @class
 */
class ModifyYarnDeployResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * When the value is "false", both the "Apply" and "Reset" buttons are grayed out.
         * @type {boolean || null}
         */
        this.IsDraft = null;

        /**
         * Error information. This field is reserved.
         * @type {string || null}
         */
        this.ErrorMsg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IsDraft = 'IsDraft' in params ? params.IsDraft : null;
        this.ErrorMsg = 'ErrorMsg' in params ? params.ErrorMsg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Elastic Scaling Record
 * @class
 */
class AutoScaleRecord extends  AbstractModel {
    constructor(){
        super();

        /**
         * Name of the scale-in or scale-out rule.
         * @type {string || null}
         */
        this.StrategyName = null;

        /**
         * "SCALE_OUT" and "SCALE_IN", representing expansion and reduction respectively.
         * @type {string || null}
         */
        this.ScaleAction = null;

        /**
         * The values are "SUCCESS", "FAILED", "PART_SUCCESS", "IN_PROCESS", which indicate success, failure, partial success, and in-progress, respectively.
         * @type {string || null}
         */
        this.ActionStatus = null;

        /**
         * Process initiation time.
         * @type {string || null}
         */
        this.ActionTime = null;

        /**
         * Description related to auto-scaling.
         * @type {string || null}
         */
        this.ScaleInfo = null;

        /**
         * Valid only when ScaleAction is SCALE_OUT.
         * @type {number || null}
         */
        this.ExpectScaleNum = null;

        /**
         * Process termination time.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Policy type. Valid values: 1 (load-based scaling), 2 (time-based scaling).
         * @type {number || null}
         */
        this.StrategyType = null;

        /**
         * Specification information used during scale-out.
         * @type {string || null}
         */
        this.SpecInfo = null;

        /**
         * Compensatory scale-out. 0: disable, 1: enable.
         * @type {number || null}
         */
        this.CompensateFlag = null;

        /**
         * Number of compensations.
         * @type {number || null}
         */
        this.CompensateCount = null;

        /**
         * Number of retries.
         * @type {number || null}
         */
        this.RetryCount = null;

        /**
         * Retry information.
         * @type {string || null}
         */
        this.RetryInfo = null;

        /**
         * Retry description in English.
         * @type {string || null}
         */
        this.RetryEnReason = null;

        /**
         * Retry description.
         * @type {string || null}
         */
        this.RetryReason = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StrategyName = 'StrategyName' in params ? params.StrategyName : null;
        this.ScaleAction = 'ScaleAction' in params ? params.ScaleAction : null;
        this.ActionStatus = 'ActionStatus' in params ? params.ActionStatus : null;
        this.ActionTime = 'ActionTime' in params ? params.ActionTime : null;
        this.ScaleInfo = 'ScaleInfo' in params ? params.ScaleInfo : null;
        this.ExpectScaleNum = 'ExpectScaleNum' in params ? params.ExpectScaleNum : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.StrategyType = 'StrategyType' in params ? params.StrategyType : null;
        this.SpecInfo = 'SpecInfo' in params ? params.SpecInfo : null;
        this.CompensateFlag = 'CompensateFlag' in params ? params.CompensateFlag : null;
        this.CompensateCount = 'CompensateCount' in params ? params.CompensateCount : null;
        this.RetryCount = 'RetryCount' in params ? params.RetryCount : null;
        this.RetryInfo = 'RetryInfo' in params ? params.RetryInfo : null;
        this.RetryEnReason = 'RetryEnReason' in params ? params.RetryEnReason : null;
        this.RetryReason = 'RetryReason' in params ? params.RetryReason : null;

    }
}

/**
 * Automatic scaling rule based on load metrics
 * @class
 */
class LoadAutoScaleStrategy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Rule ID.
         * @type {number || null}
         */
        this.StrategyId = null;

        /**
         * Rule name.
         * @type {string || null}
         */
        this.StrategyName = null;

        /**
         * Cooling time for a rule to take effect.
         * @type {number || null}
         */
        this.CalmDownTime = null;

        /**
         * Scaling action. 1: scale-out, 2: scale-in.
         * @type {number || null}
         */
        this.ScaleAction = null;

        /**
         * Scaling amount each time the rule takes effect.
         * @type {number || null}
         */
        this.ScaleNum = null;

        /**
         * Metric processing method. 1: MAX, 2: MIN, 3: AVG.
         * @type {number || null}
         */
        this.ProcessMethod = null;

        /**
         * Rule priority, which is not applicable during adding. The default is auto-increment.
         * @type {number || null}
         */
        this.Priority = null;

        /**
         * Rule status. 1: enabled, 3: disabled.
         * @type {number || null}
         */
        this.StrategyStatus = null;

        /**
         * Specified Yarn Node Label for rule scale-out.
         * @type {string || null}
         */
        this.YarnNodeLabel = null;

        /**
         * Effective time of the rule
         * @type {string || null}
         */
        this.PeriodValid = null;

        /**
         * Graceful scale-in switch
         * @type {boolean || null}
         */
        this.GraceDownFlag = null;

        /**
         * Graceful scale-in wait time
         * @type {number || null}
         */
        this.GraceDownTime = null;

        /**
         * Bound tag list

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Preset configuration group.
         * @type {string || null}
         */
        this.ConfigGroupAssigned = null;

        /**
         * Calculation method of scale-out resources:"DEFAULT","INSTANCE", "CPU", "MEMORYGB".
"DEFAULT" indicates the default method, which is the same as "INSTANCE".
"INSTANCE" indicates calculation based on nodes (default mode).
"CPU" indicates calculation based on the quantity of cores of the machine.
"MEMORYGB" indicates calculation based on the memory size of the machine.
         * @type {string || null}
         */
        this.MeasureMethod = null;

        /**
         * Node deployment service list, such as ["HDFS-3.1.2","YARN-3.1.2"].
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.SoftDeployDesc = null;

        /**
         * Startup process list, such as ["NodeManager"].
         * @type {string || null}
         */
        this.ServiceNodeDesc = null;

        /**
         * Startup process list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<number> || null}
         */
        this.ServiceNodeInfo = null;

        /**
         * Node deployment service list. Only HDFS and YARN should be specified in the deployment service list. For details, see [Mapping Table for Component Names](https://www.tencentcloud.comom/document/product/589/98760?from_cn_redirect=1).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<number> || null}
         */
        this.SoftDeployInfo = null;

        /**
         * Multi-metric trigger condition.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {LoadMetricsConditions || null}
         */
        this.LoadMetricsConditions = null;

        /**
         * Scaling group ID.
         * @type {number || null}
         */
        this.GroupId = null;

        /**
         * Soft (for example, YARN).
         * @type {string || null}
         */
        this.Soft = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StrategyId = 'StrategyId' in params ? params.StrategyId : null;
        this.StrategyName = 'StrategyName' in params ? params.StrategyName : null;
        this.CalmDownTime = 'CalmDownTime' in params ? params.CalmDownTime : null;
        this.ScaleAction = 'ScaleAction' in params ? params.ScaleAction : null;
        this.ScaleNum = 'ScaleNum' in params ? params.ScaleNum : null;
        this.ProcessMethod = 'ProcessMethod' in params ? params.ProcessMethod : null;
        this.Priority = 'Priority' in params ? params.Priority : null;
        this.StrategyStatus = 'StrategyStatus' in params ? params.StrategyStatus : null;
        this.YarnNodeLabel = 'YarnNodeLabel' in params ? params.YarnNodeLabel : null;
        this.PeriodValid = 'PeriodValid' in params ? params.PeriodValid : null;
        this.GraceDownFlag = 'GraceDownFlag' in params ? params.GraceDownFlag : null;
        this.GraceDownTime = 'GraceDownTime' in params ? params.GraceDownTime : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.ConfigGroupAssigned = 'ConfigGroupAssigned' in params ? params.ConfigGroupAssigned : null;
        this.MeasureMethod = 'MeasureMethod' in params ? params.MeasureMethod : null;
        this.SoftDeployDesc = 'SoftDeployDesc' in params ? params.SoftDeployDesc : null;
        this.ServiceNodeDesc = 'ServiceNodeDesc' in params ? params.ServiceNodeDesc : null;
        this.ServiceNodeInfo = 'ServiceNodeInfo' in params ? params.ServiceNodeInfo : null;
        this.SoftDeployInfo = 'SoftDeployInfo' in params ? params.SoftDeployInfo : null;

        if (params.LoadMetricsConditions) {
            let obj = new LoadMetricsConditions();
            obj.deserialize(params.LoadMetricsConditions)
            this.LoadMetricsConditions = obj;
        }
        this.GroupId = 'GroupId' in params ? params.GroupId : null;
        this.Soft = 'Soft' in params ? params.Soft : null;

    }
}

/**
 * Process health status
 * @class
 */
class HealthStatus extends  AbstractModel {
    constructor(){
        super();

        /**
         * Running normally.
         * @type {number || null}
         */
        this.Code = null;

        /**
         * Running normally.
         * @type {string || null}
         */
        this.Text = null;

        /**
         * Running normally.
         * @type {string || null}
         */
        this.Desc = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Code = 'Code' in params ? params.Code : null;
        this.Text = 'Text' in params ? params.Text : null;
        this.Desc = 'Desc' in params ? params.Desc : null;

    }
}

/**
 * DescribeSparkApplications request structure.
 * @class
 */
class DescribeSparkApplicationsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Querying start time.
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * Querying end time.
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Number of entries per page.
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Which page.
         * @type {number || null}
         */
        this.Page = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.Page = 'Page' in params ? params.Page : null;

    }
}

/**
 * Task parameter description
 * @class
 */
class FlowParamsDesc extends  AbstractModel {
    constructor(){
        super();

        /**
         * Parameter key
         * @type {string || null}
         */
        this.PKey = null;

        /**
         * Parameter value.
         * @type {string || null}
         */
        this.PValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PKey = 'PKey' in params ? params.PKey : null;
        this.PValue = 'PValue' in params ? params.PValue : null;

    }
}

/**
 * DescribeResourceSchedule request structure.
 * @class
 */
class DescribeResourceScheduleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * EMR cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * Custom pod permission and parameter
 * @class
 */
class PodParameter extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of TKE or EKS cluster
         * @type {string || null}
         */
        this.ClusterId = null;

        /**
         * Custom permissions
Example:
{
  "apiVersion": "v1",
  "Clusters": [
    {
      "cluster": {
        "certificate-authority-data": "xxxxxx==",
        "server": "https://xxxxx.com"
      },
      "name": "cls-xxxxx"
    }
  ],
  "contexts": [
    {
      "context": {
        "cluster": "cls-xxxxx",
        "user": "100014xxxxx"
      },
      "name": "cls-a44yhcxxxxxxxxxx"
    }
  ],
  "current-context": "cls-a4xxxx-context-default",
  "kind": "Config",
  "preferences": {},
  "users": [
    {
      "name": "100014xxxxx",
      "user": {
        "client-certificate-data": "xxxxxx",
        "client-key-data": "xxxxxx"
      }
    }
  ]
}
         * @type {string || null}
         */
        this.Config = null;

        /**
         * Custom parameters
Example:
{
    "apiVersion": "apps/v1",
    "kind": "Deployment",
    "metadata": {
      "name": "test-deployment",
      "labels": {
        "app": "test"
      }
    },
    "spec": {
      "replicas": 3,
      "selector": {
        "matchLabels": {
          "app": "test-app"
        }
      },
      "template": {
        "metadata": {
          "annotations": {
            "your-organization.com/department-v1": "test-example-v1",
            "your-organization.com/department-v2": "test-example-v2"
          },
          "labels": {
            "app": "test-app",
            "environment": "production"
          }
        },
        "spec": {
          "nodeSelector": {
            "your-organization/node-test": "test-node"
          },
          "containers": [
            {
              "name": "nginx",
              "image": "nginx:1.14.2",
              "ports": [
                {
                  "containerPort": 80
                }
              ]
            }
          ],
          "affinity": {
            "nodeAffinity": {
              "requiredDuringSchedulingIgnoredDuringExecution": {
                "nodeSelectorTerms": [
                  {
                    "matchExpressions": [
                      {
                        "key": "disk-type",
                        "operator": "In",
                        "values": [
                          "ssd",
                          "sas"
                        ]
                      },
                      {
                        "key": "cpu-num",
                        "operator": "Gt",
                        "values": [
                          "6"
                        ]
                      }
                    ]
                  }
                ]
              }
            }
          }
        }
      }
    }
  }
         * @type {string || null}
         */
        this.Parameter = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ClusterId = 'ClusterId' in params ? params.ClusterId : null;
        this.Config = 'Config' in params ? params.Config : null;
        this.Parameter = 'Parameter' in params ? params.Parameter : null;

    }
}

/**
 * Setting inspection task configurations.
 * @class
 */
class InspectionTaskSettings extends  AbstractModel {
    constructor(){
        super();

        /**
         * Unique identifier for inspection tasks.
         * @type {string || null}
         */
        this.TaskType = null;

        /**
         * Inspection task group name.
         * @type {string || null}
         */
        this.Group = null;

        /**
         * Inspection task name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Inspection task parameter settings.
         * @type {Array.<TaskSettings> || null}
         */
        this.TaskSettings = null;

        /**
         * Whether it is selected, with the valid values of "true" and "false".
         * @type {string || null}
         */
        this.Selected = null;

        /**
         * Whether monitoring is enabled.
         * @type {string || null}
         */
        this.Enable = null;

        /**
         * Event JSON template.
         * @type {string || null}
         */
        this.SettingsJson = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskType = 'TaskType' in params ? params.TaskType : null;
        this.Group = 'Group' in params ? params.Group : null;
        this.Name = 'Name' in params ? params.Name : null;

        if (params.TaskSettings) {
            this.TaskSettings = new Array();
            for (let z in params.TaskSettings) {
                let obj = new TaskSettings();
                obj.deserialize(params.TaskSettings[z]);
                this.TaskSettings.push(obj);
            }
        }
        this.Selected = 'Selected' in params ? params.Selected : null;
        this.Enable = 'Enable' in params ? params.Enable : null;
        this.SettingsJson = 'SettingsJson' in params ? params.SettingsJson : null;

    }
}

/**
 * TerminateInstance request structure.
 * @class
 */
class TerminateInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * ID of terminated node. This parameter is reserved and does not need to be configured.
         * @type {Array.<string> || null}
         */
        this.ResourceIds = null;

        /**
         * The type can be ComputeResource, EMR, or a default value. The default value is EMR. When the type is EMR, InstanceId is effective. When the type is ComputeResource, ComputeResourceId is used.
         * @type {string || null}
         */
        this.ResourceBaseType = null;

        /**
         * Computing resource ID.
         * @type {string || null}
         */
        this.ComputeResourceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ResourceIds = 'ResourceIds' in params ? params.ResourceIds : null;
        this.ResourceBaseType = 'ResourceBaseType' in params ? params.ResourceBaseType : null;
        this.ComputeResourceId = 'ComputeResourceId' in params ? params.ComputeResourceId : null;

    }
}

/**
 * Resource description
 * @class
 */
class AllNodeResourceSpec extends  AbstractModel {
    constructor(){
        super();

        /**
         * The description of master nodes.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {NodeResourceSpec || null}
         */
        this.MasterResourceSpec = null;

        /**
         * The description of core nodes.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {NodeResourceSpec || null}
         */
        this.CoreResourceSpec = null;

        /**
         * The description of task nodes.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {NodeResourceSpec || null}
         */
        this.TaskResourceSpec = null;

        /**
         * The description of common nodes.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {NodeResourceSpec || null}
         */
        this.CommonResourceSpec = null;

        /**
         * Number of Master nodes.
         * @type {number || null}
         */
        this.MasterCount = null;

        /**
         * Number of core nodes.
         * @type {number || null}
         */
        this.CoreCount = null;

        /**
         * Number of task nodes.
         * @type {number || null}
         */
        this.TaskCount = null;

        /**
         * Number of common nodes.
         * @type {number || null}
         */
        this.CommonCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.MasterResourceSpec) {
            let obj = new NodeResourceSpec();
            obj.deserialize(params.MasterResourceSpec)
            this.MasterResourceSpec = obj;
        }

        if (params.CoreResourceSpec) {
            let obj = new NodeResourceSpec();
            obj.deserialize(params.CoreResourceSpec)
            this.CoreResourceSpec = obj;
        }

        if (params.TaskResourceSpec) {
            let obj = new NodeResourceSpec();
            obj.deserialize(params.TaskResourceSpec)
            this.TaskResourceSpec = obj;
        }

        if (params.CommonResourceSpec) {
            let obj = new NodeResourceSpec();
            obj.deserialize(params.CommonResourceSpec)
            this.CommonResourceSpec = obj;
        }
        this.MasterCount = 'MasterCount' in params ? params.MasterCount : null;
        this.CoreCount = 'CoreCount' in params ? params.CoreCount : null;
        this.TaskCount = 'TaskCount' in params ? params.TaskCount : null;
        this.CommonCount = 'CommonCount' in params ? params.CommonCount : null;

    }
}

/**
 * User group information.
 * @class
 */
class GroupInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Group name.
         * @type {string || null}
         */
        this.GroupName = null;

        /**
         * Remarks.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * User list.
         * @type {Array.<string> || null}
         */
        this.Users = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GroupName = 'GroupName' in params ? params.GroupName : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Users = 'Users' in params ? params.Users : null;

    }
}

/**
 * DescribeGlobalConfig response structure.
 * @class
 */
class DescribeGlobalConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether the resource scheduling feature is enabled.
         * @type {boolean || null}
         */
        this.EnableResourceSchedule = null;

        /**
         * Currently effective resource scheduler.
         * @type {string || null}
         */
        this.ActiveScheduler = null;

        /**
         * Information of the fair scheduler.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {CapacityGlobalConfig || null}
         */
        this.CapacityGlobalConfig = null;

        /**
         * Information of the capacity scheduler.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {FairGlobalConfig || null}
         */
        this.FairGlobalConfig = null;

        /**
         * Latest resource scheduler.
         * @type {string || null}
         */
        this.Scheduler = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.EnableResourceSchedule = 'EnableResourceSchedule' in params ? params.EnableResourceSchedule : null;
        this.ActiveScheduler = 'ActiveScheduler' in params ? params.ActiveScheduler : null;

        if (params.CapacityGlobalConfig) {
            let obj = new CapacityGlobalConfig();
            obj.deserialize(params.CapacityGlobalConfig)
            this.CapacityGlobalConfig = obj;
        }

        if (params.FairGlobalConfig) {
            let obj = new FairGlobalConfig();
            obj.deserialize(params.FairGlobalConfig)
            this.FairGlobalConfig = obj;
        }
        this.Scheduler = 'Scheduler' in params ? params.Scheduler : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyYarnDeploy request structure.
 * @class
 */
class ModifyYarnDeployRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Scheduler after switching. The values are fair and capacity.
         * @type {string || null}
         */
        this.NewScheduler = null;

        /**
         * Currently used scheduler. The values are fair and capacity.
         * @type {string || null}
         */
        this.OldScheduler = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.NewScheduler = 'NewScheduler' in params ? params.NewScheduler : null;
        this.OldScheduler = 'OldScheduler' in params ? params.OldScheduler : null;

    }
}

/**
 * DeleteNodeResourceConfig response structure.
 * @class
 */
class DeleteNodeResourceConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeClusterFlowStatusDetail request structure.
 * @class
 */
class DescribeClusterFlowStatusDetailRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * EMR instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Process-related parameters.
         * @type {FlowParam || null}
         */
        this.FlowParam = null;

        /**
         * Whether to return additional task information.
The default value is false.
         * @type {boolean || null}
         */
        this.NeedExtraDetail = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.FlowParam) {
            let obj = new FlowParam();
            obj.deserialize(params.FlowParam)
            this.FlowParam = obj;
        }
        this.NeedExtraDetail = 'NeedExtraDetail' in params ? params.NeedExtraDetail : null;

    }
}

/**
 * DescribeUsersForUserManager request structure.
 * @class
 */
class DescribeUsersForUserManagerRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Page number
         * @type {number || null}
         */
        this.PageNo = null;

        /**
         * Pagination size.
All are queried by default. If the PageNo and PageSize settings are inappropriate, all are queried.
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * User list query filter
         * @type {UserManagerFilter || null}
         */
        this.UserManagerFilter = null;

        /**
         * Whether the Keytab file information is required. This field is only valid for clusters with Kerberos enabled and defaults to `false`.
         * @type {boolean || null}
         */
        this.NeedKeytabInfo = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.PageNo = 'PageNo' in params ? params.PageNo : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;

        if (params.UserManagerFilter) {
            let obj = new UserManagerFilter();
            obj.deserialize(params.UserManagerFilter)
            this.UserManagerFilter = obj;
        }
        this.NeedKeytabInfo = 'NeedKeytabInfo' in params ? params.NeedKeytabInfo : null;

    }
}

/**
 * TerminateClusterNodes response structure.
 * @class
 */
class TerminateClusterNodesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The scale-in process ID.
         * @type {number || null}
         */
        this.FlowId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDAGInfo response structure.
 * @class
 */
class DescribeDAGInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number, which is used for pagination query.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * StarRocks information list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DAGInfo> || null}
         */
        this.DAGInfoList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.DAGInfoList) {
            this.DAGInfoList = new Array();
            for (let z in params.DAGInfoList) {
                let obj = new DAGInfo();
                obj.deserialize(params.DAGInfoList[z]);
                this.DAGInfoList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Kubernetes Taint
 * @class
 */
class Taint extends  AbstractModel {
    constructor(){
        super();

        /**
         * Taint Key
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Taint Value
         * @type {string || null}
         */
        this.Value = null;

        /**
         * Taint Effect
         * @type {string || null}
         */
        this.Effect = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;
        this.Effect = 'Effect' in params ? params.Effect : null;

    }
}

/**
 * Dynamically generated change details.
 * @class
 */
class DiffDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Tab page header.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Number of change items.
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Detailed data to be rendered.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DiffDetailItem> || null}
         */
        this.Rows = null;

        /**
         * Header information to be rendered.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DiffHeader> || null}
         */
        this.Header = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Count = 'Count' in params ? params.Count : null;

        if (params.Rows) {
            this.Rows = new Array();
            for (let z in params.Rows) {
                let obj = new DiffDetailItem();
                obj.deserialize(params.Rows[z]);
                this.Rows.push(obj);
            }
        }

        if (params.Header) {
            this.Header = new Array();
            for (let z in params.Header) {
                let obj = new DiffHeader();
                obj.deserialize(params.Header[z]);
                this.Header.push(obj);
            }
        }

    }
}

/**
 * DescribeInsightList request structure.
 * @class
 */
class DescribeInsightListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Start time of the obtained insight result. The time is specific for filtering the start time of App or Hive querying.
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * End time of the obtained insight result. The time is specific for filtering the start time of App or Hive querying.
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Page size for pagination query. The minimum value is 1, and the maximum value is 100.
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Page number for pagination queries, starting from 1.
         * @type {number || null}
         */
        this.Page = null;

        /**
         * Query type. Types such as Hive,Spark,DLC_Spark,Spark_SQL,SCHEDULE,MapReduce,Trino are supported. All are queried by default.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * 
         * @type {boolean || null}
         */
        this.MustHasContext = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.Page = 'Page' in params ? params.Page : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.MustHasContext = 'MustHasContext' in params ? params.MustHasContext : null;

    }
}

/**
 * DescribeSLInstanceList request structure.
 * @class
 */
class DescribeSLInstanceListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance filtering policy. Valid values: <li>clusterList: Query the list of instances except for those that have been terminated.</li> <li>monitorManage: Query the list of instances except for those that have been terminated, are being created, or fail to be created.</li>
         * @type {string || null}
         */
        this.DisplayStrategy = null;

        /**
         * Page number. The default value is 0, indicating the first page.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of records to be returned per page. The default value is 10, and the maximum value is 100.	
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Sorting field. Valid values: <li>clusterId: Sort by instance ID.</li> <li>addTime: Sort by instance creation time.</li> <li>status: Sort by instance status code.</li>
         * @type {string || null}
         */
        this.OrderField = null;

        /**
         * Sorts by OrderField in ascending or descending order. Valid values: <li>0: ascending order;</li> <li>1: descending order.</li> The default value is 0.
         * @type {number || null}
         */
        this.Asc = null;

        /**
         * Custom search filters. Examples: <li>Filter instances by ClusterId: [{"Name":"ClusterId","Values":["emr-xxxxxxxx"]}]</li><li> Filter instances by clusterName: [{"Name": "ClusterName","Values": ["cluster_name"]}]</li><li>Filter instances by ClusterStatus: [{"Name": "ClusterStatus","Values": ["2"]}]</li>
         * @type {Array.<Filters> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DisplayStrategy = 'DisplayStrategy' in params ? params.DisplayStrategy : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.OrderField = 'OrderField' in params ? params.OrderField : null;
        this.Asc = 'Asc' in params ? params.Asc : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filters();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * StartStopServiceOrMonitor response structure.
 * @class
 */
class StartStopServiceOrMonitorResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeHiveQueries response structure.
 * @class
 */
class DescribeHiveQueriesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total items
         * @type {number || null}
         */
        this.Total = null;

        /**
         * Result list
         * @type {Array.<HiveQuery> || null}
         */
        this.Results = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;

        if (params.Results) {
            this.Results = new Array();
            for (let z in params.Results) {
                let obj = new HiveQuery();
                obj.deserialize(params.Results[z]);
                this.Results.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ResizeDataDisks response structure.
 * @class
 */
class ResizeDataDisksResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Flow ID.
         * @type {number || null}
         */
        this.FlowId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeYarnQueue request structure.
 * @class
 */
class DescribeYarnQueueRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Scheduler. The values are as follows:

1. capacity
2. fair
         * @type {string || null}
         */
        this.Scheduler = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Scheduler = 'Scheduler' in params ? params.Scheduler : null;

    }
}

/**
 * Resource scheduling - configuration set information.
 * @class
 */
class ConfigSetInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Configuration set name.
         * @type {string || null}
         */
        this.ConfigSet = null;

        /**
         * The capacity scheduler will use it, where tag-related configuration is set. The key values are consistent with the fields returned by **DescribeYarnQueue**.
The key values are as follows:
- labelName: Tag name, that is, tags in tag management.
- capacity: Capacity. The value is a **numeric string**.
- maximum-capacity: Maximum capacity. The value is a **numeric string**.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ItemSeq> || null}
         */
        this.LabelParams = null;

        /**
         * Set parameters related to the configuration set. The key values are consistent with the fields returned by **DescribeYarnQueue**.
###### Fair scheduler.
The key values are as follows:
- minResources: Minimum resource amount. The value is a **JSON string of the YarnResource type** or **null**.
- maxResources: Maximum resource amount. The value is a **JSON string of the YarnResource type** or **null**.
- maxChildResources: Maximum resource amount for undeclared subqueues. The value is a **numeric string** or **null**.
- maxRunningApps: Maximum number of apps that can run concurrently. The value is a **numeric string** or **null**.
- weight: weight. The value is a **numeric string** or **null**.
- maxAMShare: Maximum App Master share. The value is a **numeric string** or **null**, where the number range is [0,1] or -1.

```
type YarnResource struct {
	Vcores *int `json:"vcores"`
	Memory *int `json:"memory"`
	Type *string `json:"type"` // The value can be percent or null. When the value is percent, it indicates the percentage used; otherwise, the absolute value used is indicated. The value can be percent only for maxResources and maxChildResources.
}
```

###### Capacity scheduler.
The key values are as follows:
- minimum-user-limit-percent: Minimum user capacity. The value is a **JSON string of the YarnResource type** or **null**, where the number range is [0,100].
- user-limit-factor: User resource factor. The value is a **JSON string of the YarnResource type** or **null**.
- maximum-applications: Maximum number of applications, that is, Max-Applications. The value is a **numeric string** or **null**, where the numbers must be positive integers.
- maximum-am-resource-percent: maximum AM percent. The value is a **numeric string** or **null**, where the number range is [0,1] or -1.
- default-application-priority: Resource pool priority. The value is a **numeric string** or **null**, where the numbers must be positive integers.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Item> || null}
         */
        this.BasicParams = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ConfigSet = 'ConfigSet' in params ? params.ConfigSet : null;

        if (params.LabelParams) {
            this.LabelParams = new Array();
            for (let z in params.LabelParams) {
                let obj = new ItemSeq();
                obj.deserialize(params.LabelParams[z]);
                this.LabelParams.push(obj);
            }
        }

        if (params.BasicParams) {
            this.BasicParams = new Array();
            for (let z in params.BasicParams) {
                let obj = new Item();
                obj.deserialize(params.BasicParams[z]);
                this.BasicParams.push(obj);
            }
        }

    }
}

/**
 * ModifyResource request structure.
 * @class
 */
class ModifyResourceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Billing type.
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Resized CPU.
         * @type {number || null}
         */
        this.NewCpu = null;

        /**
         * Resized memory.
         * @type {number || null}
         */
        this.NewMem = null;

        /**
         * Token
         * @type {string || null}
         */
        this.ClientToken = null;

        /**
         * Resized machine specifications.
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * Node ID List.
         * @type {Array.<string> || null}
         */
        this.ResourceIdList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.NewCpu = 'NewCpu' in params ? params.NewCpu : null;
        this.NewMem = 'NewMem' in params ? params.NewMem : null;
        this.ClientToken = 'ClientToken' in params ? params.ClientToken : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.ResourceIdList = 'ResourceIdList' in params ? params.ResourceIdList : null;

    }
}

/**
 * Pre-execution script configuration
 * @class
 */
class PreExecuteFileSettings extends  AbstractModel {
    constructor(){
        super();

        /**
         * COS path to script, which has been disused
         * @type {string || null}
         */
        this.Path = null;

        /**
         * Execution script parameter
         * @type {Array.<string> || null}
         */
        this.Args = null;

        /**
         * COS bucket name, which has been disused
         * @type {string || null}
         */
        this.Bucket = null;

        /**
         * COS region name, which has been disused
         * @type {string || null}
         */
        this.Region = null;

        /**
         * COS domain data, which has been disused
         * @type {string || null}
         */
        this.Domain = null;

        /**
         * Execution sequence
         * @type {number || null}
         */
        this.RunOrder = null;

        /**
         * `resourceAfter` or `clusterAfter`
         * @type {string || null}
         */
        this.WhenRun = null;

        /**
         * Script name, which has been disused
         * @type {string || null}
         */
        this.CosFileName = null;

        /**
         * COS address of script
         * @type {string || null}
         */
        this.CosFileURI = null;

        /**
         * COS `SecretId`
         * @type {string || null}
         */
        this.CosSecretId = null;

        /**
         * COS `SecretKey`
         * @type {string || null}
         */
        this.CosSecretKey = null;

        /**
         * COS `appid`, which has been disused
         * @type {string || null}
         */
        this.AppId = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Remark = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Path = 'Path' in params ? params.Path : null;
        this.Args = 'Args' in params ? params.Args : null;
        this.Bucket = 'Bucket' in params ? params.Bucket : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.Domain = 'Domain' in params ? params.Domain : null;
        this.RunOrder = 'RunOrder' in params ? params.RunOrder : null;
        this.WhenRun = 'WhenRun' in params ? params.WhenRun : null;
        this.CosFileName = 'CosFileName' in params ? params.CosFileName : null;
        this.CosFileURI = 'CosFileURI' in params ? params.CosFileURI : null;
        this.CosSecretId = 'CosSecretId' in params ? params.CosSecretId : null;
        this.CosSecretKey = 'CosSecretKey' in params ? params.CosSecretKey : null;
        this.AppId = 'AppId' in params ? params.AppId : null;
        this.Remark = 'Remark' in params ? params.Remark : null;

    }
}

/**
 * TerminateTasks request structure.
 * @class
 */
class TerminateTasksRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * List of resource IDs of the node to be terminated. The resource ID is in the format of `emr-vm-xxxxxxxx`. A valid resource ID can be queried in the [console](https://console.cloud.tencent.com/emr/static/hardware).
         * @type {Array.<string> || null}
         */
        this.ResourceIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ResourceIds = 'ResourceIds' in params ? params.ResourceIds : null;

    }
}

/**
 * ModifyAutoRenewFlag response structure.
 * @class
 */
class ModifyAutoRenewFlagResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Service process information.
 * @class
 */
class ServiceNodeDetailInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Process node IP
         * @type {string || null}
         */
        this.Ip = null;

        /**
         * Process type.
         * @type {number || null}
         */
        this.NodeType = null;

        /**
         * Process name
         * @type {string || null}
         */
        this.NodeName = null;

        /**
         * Service component status
         * @type {number || null}
         */
        this.ServiceStatus = null;

        /**
         * Process monitoring status
         * @type {number || null}
         */
        this.MonitorStatus = null;

        /**
         * Service component status
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Process port information
         * @type {string || null}
         */
        this.PortsInfo = null;

        /**
         * Last restart time.
         * @type {string || null}
         */
        this.LastRestartTime = null;

        /**
         * Node type.
         * @type {number || null}
         */
        this.Flag = null;

        /**
         * Configuration group ID.
         * @type {number || null}
         */
        this.ConfGroupId = null;

        /**
         * Configuration group name.
         * @type {string || null}
         */
        this.ConfGroupName = null;

        /**
         * Whether the node needs to be restarted
         * @type {number || null}
         */
        this.ConfStatus = null;

        /**
         * Process detection information

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ServiceProcessFunctionInfo> || null}
         */
        this.ServiceDetectionInfo = null;

        /**
         * Node type.
         * @type {string || null}
         */
        this.NodeFlagFilter = null;

        /**
         * Process health status

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {HealthStatus || null}
         */
        this.HealthStatus = null;

        /**
         * Whether the role supports monitoring.
         * @type {boolean || null}
         */
        this.IsSupportRoleMonitor = null;

        /**
         * Suspension policy

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<RestartPolicy> || null}
         */
        this.StopPolicies = null;

        /**
         * Strong validation of the API in a test environment. This strong validation doesn't exist on the current network, but it does exist in the data returned by the emrcc interface. If it’s not applied, an error will be reported. Omitting it will result in an error.
         * @type {string || null}
         */
        this.HAState = null;

        /**
         * NameService name.
         * @type {string || null}
         */
        this.NameService = null;

        /**
         * Whether the federation is supported.
         * @type {boolean || null}
         */
        this.IsFederation = null;

        /**
         * Whether the DataNode is in maintenance status.
         * @type {number || null}
         */
        this.DataNodeMaintenanceState = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Ip = 'Ip' in params ? params.Ip : null;
        this.NodeType = 'NodeType' in params ? params.NodeType : null;
        this.NodeName = 'NodeName' in params ? params.NodeName : null;
        this.ServiceStatus = 'ServiceStatus' in params ? params.ServiceStatus : null;
        this.MonitorStatus = 'MonitorStatus' in params ? params.MonitorStatus : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.PortsInfo = 'PortsInfo' in params ? params.PortsInfo : null;
        this.LastRestartTime = 'LastRestartTime' in params ? params.LastRestartTime : null;
        this.Flag = 'Flag' in params ? params.Flag : null;
        this.ConfGroupId = 'ConfGroupId' in params ? params.ConfGroupId : null;
        this.ConfGroupName = 'ConfGroupName' in params ? params.ConfGroupName : null;
        this.ConfStatus = 'ConfStatus' in params ? params.ConfStatus : null;

        if (params.ServiceDetectionInfo) {
            this.ServiceDetectionInfo = new Array();
            for (let z in params.ServiceDetectionInfo) {
                let obj = new ServiceProcessFunctionInfo();
                obj.deserialize(params.ServiceDetectionInfo[z]);
                this.ServiceDetectionInfo.push(obj);
            }
        }
        this.NodeFlagFilter = 'NodeFlagFilter' in params ? params.NodeFlagFilter : null;

        if (params.HealthStatus) {
            let obj = new HealthStatus();
            obj.deserialize(params.HealthStatus)
            this.HealthStatus = obj;
        }
        this.IsSupportRoleMonitor = 'IsSupportRoleMonitor' in params ? params.IsSupportRoleMonitor : null;

        if (params.StopPolicies) {
            this.StopPolicies = new Array();
            for (let z in params.StopPolicies) {
                let obj = new RestartPolicy();
                obj.deserialize(params.StopPolicies[z]);
                this.StopPolicies.push(obj);
            }
        }
        this.HAState = 'HAState' in params ? params.HAState : null;
        this.NameService = 'NameService' in params ? params.NameService : null;
        this.IsFederation = 'IsFederation' in params ? params.IsFederation : null;
        this.DataNodeMaintenanceState = 'DataNodeMaintenanceState' in params ? params.DataNodeMaintenanceState : null;

    }
}

/**
 * Configuration group specified for scale-out.
 * @class
 */
class ScaleOutServiceConfGroupsInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Component version name, for example, HDFS-2.8.5.
         * @type {string || null}
         */
        this.ServiceComponentName = null;

        /**
         * Configuration group name, for example, hdfs-core-defaultGroup. If the ConfGroupName parameter is passed in, the configuration group dimension is used.
                                                             If the ConfGroupName parameter is not passed in, the cluster dimension is used.
         * @type {string || null}
         */
        this.ConfGroupName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceComponentName = 'ServiceComponentName' in params ? params.ServiceComponentName : null;
        this.ConfGroupName = 'ConfGroupName' in params ? params.ConfGroupName : null;

    }
}

/**
 * CreateSLInstance response structure.
 * @class
 */
class CreateSLInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance unique identifier (string).
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Node model type.
 * @class
 */
class NodeSpecType extends  AbstractModel {
    constructor(){
        super();

        /**
         * Model series.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Model series name.
         * @type {string || null}
         */
        this.TypeName = null;

        /**
         * Order.
         * @type {number || null}
         */
        this.Order = null;

        /**
         * InstanceFamily array.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<NodeSpecFamily> || null}
         */
        this.InstanceFamilies = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Type = 'Type' in params ? params.Type : null;
        this.TypeName = 'TypeName' in params ? params.TypeName : null;
        this.Order = 'Order' in params ? params.Order : null;

        if (params.InstanceFamilies) {
            this.InstanceFamilies = new Array();
            for (let z in params.InstanceFamilies) {
                let obj = new NodeSpecFamily();
                obj.deserialize(params.InstanceFamilies[z]);
                this.InstanceFamilies.push(obj);
            }
        }

    }
}

/**
 * DescribeYarnScheduleHistory response structure.
 * @class
 */
class DescribeYarnScheduleHistoryResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task details.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<SchedulerTaskInfo> || null}
         */
        this.Tasks = null;

        /**
         * Total quantity of task details.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * Scheduling type filter list

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.SchedulerNameList = null;

        /**
         * Status filter list

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<number> || null}
         */
        this.StateList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Tasks) {
            this.Tasks = new Array();
            for (let z in params.Tasks) {
                let obj = new SchedulerTaskInfo();
                obj.deserialize(params.Tasks[z]);
                this.Tasks.push(obj);
            }
        }
        this.Total = 'Total' in params ? params.Total : null;
        this.SchedulerNameList = 'SchedulerNameList' in params ? params.SchedulerNameList : null;
        this.StateList = 'StateList' in params ? params.StateList : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeDAGInfo request structure.
 * @class
 */
class DescribeDAGInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID.
         * @type {string || null}
         */
        this.InstanceID = null;

        /**
         * DAG type. Only STARROCKS is supported currently.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Query ID list. The maximum length is 1.
         * @type {Array.<string> || null}
         */
        this.IDList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceID = 'InstanceID' in params ? params.InstanceID : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.IDList = 'IDList' in params ? params.IDList : null;

    }
}

/**
 * DescribeAutoScaleGroupGlobalConf response structure.
 * @class
 */
class DescribeAutoScaleGroupGlobalConfResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Global information of all scaling groups in the cluster.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<GroupGlobalConfs> || null}
         */
        this.GroupGlobalConfs = null;

        /**
         * Total number.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.GroupGlobalConfs) {
            this.GroupGlobalConfs = new Array();
            for (let z in params.GroupGlobalConfs) {
                let obj = new GroupGlobalConfs();
                obj.deserialize(params.GroupGlobalConfs[z]);
                this.GroupGlobalConfs.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Resource details
 * @class
 */
class Resource extends  AbstractModel {
    constructor(){
        super();

        /**
         * Node specifications description, such as CVM.SA2.
         * @type {string || null}
         */
        this.Spec = null;

        /**
         * Storage type.
Valid values:
<li>4: Cloud SSD.</li>
<li>5: Premium Cloud Disk.</li>
<li>6: Enhanced SSD.</li>
<li>11: Throughput HDD.</li>
<li>12: Tremendous SSD.</li>: this type is invalid upon creation, and automatic judgment will be conducted based on data disk type and node type.
         * @type {number || null}
         */
        this.StorageType = null;

        /**
         * Disk type.
Valid values.
<li>CLOUD_SSD: Cloud SSD.</li>
<li>CLOUD_PREMIUM: Premium Cloud Disk.</li>
<li>CLOUD_BASIC: Cloud Disk.</li>
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Memory capacity, in MB.
         * @type {number || null}
         */
        this.MemSize = null;

        /**
         * Number of CPU cores.
         * @type {number || null}
         */
        this.Cpu = null;

        /**
         * Data disk capacity.
         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * System disk capacity.
         * @type {number || null}
         */
        this.RootSize = null;

        /**
         * List of cloud disks. When the data disk is a cloud disk, `DiskType` and `DiskSize` are used directly; `MultiDisks` will be used for the excessive part
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {Array.<MultiDisk> || null}
         */
        this.MultiDisks = null;

        /**
         * List of tags to be bound
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Specifications type, such as S2.MEDIUM8.
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * Number of local disks. This field is deprecated.
         * @type {number || null}
         */
        this.LocalDiskNum = null;

        /**
         * Number of local disks, such as 2.
         * @type {number || null}
         */
        this.DiskNum = null;

        /**
         * GPU information.
         * @type {string || null}
         */
        this.GpuDesc = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Spec = 'Spec' in params ? params.Spec : null;
        this.StorageType = 'StorageType' in params ? params.StorageType : null;
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.MemSize = 'MemSize' in params ? params.MemSize : null;
        this.Cpu = 'Cpu' in params ? params.Cpu : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.RootSize = 'RootSize' in params ? params.RootSize : null;

        if (params.MultiDisks) {
            this.MultiDisks = new Array();
            for (let z in params.MultiDisks) {
                let obj = new MultiDisk();
                obj.deserialize(params.MultiDisks[z]);
                this.MultiDisks.push(obj);
            }
        }

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.LocalDiskNum = 'LocalDiskNum' in params ? params.LocalDiskNum : null;
        this.DiskNum = 'DiskNum' in params ? params.DiskNum : null;
        this.GpuDesc = 'GpuDesc' in params ? params.GpuDesc : null;

    }
}

/**
 * DescribeEmrApplicationStatics request structure.
 * @class
 */
class DescribeEmrApplicationStaticsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Start time in the format of timestamp. Unit: seconds.
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * End time in the format of timestamp. Unit: seconds.
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Queue name used for filtering
         * @type {Array.<string> || null}
         */
        this.Queues = null;

        /**
         * Username used for filtering
         * @type {Array.<string> || null}
         */
        this.Users = null;

        /**
         * Application type used for filtering
         * @type {Array.<string> || null}
         */
        this.ApplicationTypes = null;

        /**
         * Group field. Valid values: `queue`, `user`, and `applicationType`.
         * @type {Array.<string> || null}
         */
        this.GroupBy = null;

        /**
         * Sorting field. Valid values: `sumMemorySeconds`, `sumVCoreSeconds`, `sumHDFSBytesWritten`, and `sumHDFSBytesRead`.
         * @type {string || null}
         */
        this.OrderBy = null;

        /**
         * Order type. Valid values: `0` (descending) and `1`(ascending).
         * @type {number || null}
         */
        this.IsAsc = null;

        /**
         * Page number
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Page capacity in the range of [10,100].
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Queues = 'Queues' in params ? params.Queues : null;
        this.Users = 'Users' in params ? params.Users : null;
        this.ApplicationTypes = 'ApplicationTypes' in params ? params.ApplicationTypes : null;
        this.GroupBy = 'GroupBy' in params ? params.GroupBy : null;
        this.OrderBy = 'OrderBy' in params ? params.OrderBy : null;
        this.IsAsc = 'IsAsc' in params ? params.IsAsc : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * Serverless Instance
 * @class
 */
class SLInstance extends  AbstractModel {
    constructor(){
        super();

        /**
         * EMR Instance Id
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * EMR Numeric Instance Id
         * @type {number || null}
         */
        this.ClusterId = null;

        /**
         * Instance Name
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Region id
         * @type {number || null}
         */
        this.RegionId = null;

        /**
         * Zone Name
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Pay Mode
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Disk Type
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Disk Size
         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * Node Type
         * @type {string || null}
         */
        this.NodeType = null;

        /**
         * Node Number
         * @type {number || null}
         */
        this.NodeNum = null;

        /**
         * Expire Time
         * @type {string || null}
         */
        this.ExpireTime = null;

        /**
         * Isolate Time
         * @type {string || null}
         */
        this.IsolateTime = null;

        /**
         * Create Time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Auto Renew Flag
         * @type {number || null}
         */
        this.AutoRenewFlag = null;

        /**
         * EMR Numeric Instance Status
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Zone Setting
         * @type {Array.<ZoneSetting> || null}
         */
        this.ZoneSettings = null;

        /**
         * Bound Tags
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Deploy Role
         * @type {string || null}
         */
        this.DeployRole = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ClusterId = 'ClusterId' in params ? params.ClusterId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.RegionId = 'RegionId' in params ? params.RegionId : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.NodeType = 'NodeType' in params ? params.NodeType : null;
        this.NodeNum = 'NodeNum' in params ? params.NodeNum : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.IsolateTime = 'IsolateTime' in params ? params.IsolateTime : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.AutoRenewFlag = 'AutoRenewFlag' in params ? params.AutoRenewFlag : null;
        this.Status = 'Status' in params ? params.Status : null;

        if (params.ZoneSettings) {
            this.ZoneSettings = new Array();
            for (let z in params.ZoneSettings) {
                let obj = new ZoneSetting();
                obj.deserialize(params.ZoneSettings[z]);
                this.ZoneSettings.push(obj);
            }
        }

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.DeployRole = 'DeployRole' in params ? params.DeployRole : null;

    }
}

/**
 * DescribeClusterNodes response structure.
 * @class
 */
class DescribeClusterNodesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of queried nodes
         * @type {number || null}
         */
        this.TotalCnt = null;

        /**
         * List of node details
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {Array.<NodeHardwareInfo> || null}
         */
        this.NodeList = null;

        /**
         * List of tag keys owned by user
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.TagKeys = null;

        /**
         * Resource type list
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.HardwareResourceTypeList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCnt = 'TotalCnt' in params ? params.TotalCnt : null;

        if (params.NodeList) {
            this.NodeList = new Array();
            for (let z in params.NodeList) {
                let obj = new NodeHardwareInfo();
                obj.deserialize(params.NodeList[z]);
                this.NodeList.push(obj);
            }
        }
        this.TagKeys = 'TagKeys' in params ? params.TagKeys : null;
        this.HardwareResourceTypeList = 'HardwareResourceTypeList' in params ? params.HardwareResourceTypeList : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * TerminateInstance response structure.
 * @class
 */
class TerminateInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeYarnScheduleHistory request structure.
 * @class
 */
class DescribeYarnScheduleHistoryRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Start time
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * End time
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Page number.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Page size.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Scheduler type. The values are ALL, Capacity Scheduler, and Fair Scheduler.
         * @type {string || null}
         */
        this.SchedulerType = null;

        /**
         * Task type. 0: waiting; 1: executing; 2: completed; -1: failed; -99: all.
         * @type {number || null}
         */
        this.TaskState = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.SchedulerType = 'SchedulerType' in params ? params.SchedulerType : null;
        this.TaskState = 'TaskState' in params ? params.TaskState : null;

    }
}

/**
 * Resource description
 * @class
 */
class NewResourceSpec extends  AbstractModel {
    constructor(){
        super();

        /**
         * Describes master node resource
         * @type {Resource || null}
         */
        this.MasterResourceSpec = null;

        /**
         * Describes core node resource
         * @type {Resource || null}
         */
        this.CoreResourceSpec = null;

        /**
         * Describes task node resource
         * @type {Resource || null}
         */
        this.TaskResourceSpec = null;

        /**
         * Number of master nodes
         * @type {number || null}
         */
        this.MasterCount = null;

        /**
         * Number of core nodes
         * @type {number || null}
         */
        this.CoreCount = null;

        /**
         * Number of task nodes
         * @type {number || null}
         */
        this.TaskCount = null;

        /**
         * Describes common node resource
         * @type {Resource || null}
         */
        this.CommonResourceSpec = null;

        /**
         * Number of common nodes
         * @type {number || null}
         */
        this.CommonCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.MasterResourceSpec) {
            let obj = new Resource();
            obj.deserialize(params.MasterResourceSpec)
            this.MasterResourceSpec = obj;
        }

        if (params.CoreResourceSpec) {
            let obj = new Resource();
            obj.deserialize(params.CoreResourceSpec)
            this.CoreResourceSpec = obj;
        }

        if (params.TaskResourceSpec) {
            let obj = new Resource();
            obj.deserialize(params.TaskResourceSpec)
            this.TaskResourceSpec = obj;
        }
        this.MasterCount = 'MasterCount' in params ? params.MasterCount : null;
        this.CoreCount = 'CoreCount' in params ? params.CoreCount : null;
        this.TaskCount = 'TaskCount' in params ? params.TaskCount : null;

        if (params.CommonResourceSpec) {
            let obj = new Resource();
            obj.deserialize(params.CommonResourceSpec)
            this.CommonResourceSpec = obj;
        }
        this.CommonCount = 'CommonCount' in params ? params.CommonCount : null;

    }
}

/**
 * ModifyYarnQueueV2 response structure.
 * @class
 */
class ModifyYarnQueueV2Response extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * The type and number of nodes to be added.
 * @class
 */
class ScaleOutNodeConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * Valid values of node type:
  <li>MASTER</li>
  <li>TASK</li>
  <li>CORE</li>
  <li>ROUTER</li>
         * @type {string || null}
         */
        this.NodeFlag = null;

        /**
         * The number of nodes.
         * @type {number || null}
         */
        this.NodeCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NodeFlag = 'NodeFlag' in params ? params.NodeFlag : null;
        this.NodeCount = 'NodeCount' in params ? params.NodeCount : null;

    }
}

/**
 * Forcibly Modifying Tags
 * @class
 */
class ModifyResourceTags extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID or CVM ID
         * @type {string || null}
         */
        this.ResourceId = null;

        /**
         * 6-segment resource expression
         * @type {string || null}
         */
        this.Resource = null;

        /**
         * Resource prefix
         * @type {string || null}
         */
        this.ResourcePrefix = null;

        /**
         * ap-beijing
         * @type {string || null}
         */
        this.ResourceRegion = null;

        /**
         * emr
         * @type {string || null}
         */
        this.ServiceType = null;

        /**
         * List of deleted tags
         * @type {Array.<Tag> || null}
         */
        this.DeleteTags = null;

        /**
         * List of added tags
         * @type {Array.<Tag> || null}
         */
        this.AddTags = null;

        /**
         * List of modified tags
         * @type {Array.<Tag> || null}
         */
        this.ModifyTags = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceId = 'ResourceId' in params ? params.ResourceId : null;
        this.Resource = 'Resource' in params ? params.Resource : null;
        this.ResourcePrefix = 'ResourcePrefix' in params ? params.ResourcePrefix : null;
        this.ResourceRegion = 'ResourceRegion' in params ? params.ResourceRegion : null;
        this.ServiceType = 'ServiceType' in params ? params.ServiceType : null;

        if (params.DeleteTags) {
            this.DeleteTags = new Array();
            for (let z in params.DeleteTags) {
                let obj = new Tag();
                obj.deserialize(params.DeleteTags[z]);
                this.DeleteTags.push(obj);
            }
        }

        if (params.AddTags) {
            this.AddTags = new Array();
            for (let z in params.AddTags) {
                let obj = new Tag();
                obj.deserialize(params.AddTags[z]);
                this.AddTags.push(obj);
            }
        }

        if (params.ModifyTags) {
            this.ModifyTags = new Array();
            for (let z in params.ModifyTags) {
                let obj = new Tag();
                obj.deserialize(params.ModifyTags[z]);
                this.ModifyTags.push(obj);
            }
        }

    }
}

/**
 * SetNodeResourceConfigDefault response structure.
 * @class
 */
class SetNodeResourceConfigDefaultResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Description of Pod storage.
 * @class
 */
class PodVolume extends  AbstractModel {
    constructor(){
        super();

        /**
         * Storage type, which can be "pvc" or "hostpath".
         * @type {string || null}
         */
        this.VolumeType = null;

        /**
         * This field will take effect if `VolumeType` is `pvc`.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {PersistentVolumeContext || null}
         */
        this.PVCVolume = null;

        /**
         * This field will take effect if `VolumeType` is `hostpath`.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {HostVolumeContext || null}
         */
        this.HostVolume = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VolumeType = 'VolumeType' in params ? params.VolumeType : null;

        if (params.PVCVolume) {
            let obj = new PersistentVolumeContext();
            obj.deserialize(params.PVCVolume)
            this.PVCVolume = obj;
        }

        if (params.HostVolume) {
            let obj = new HostVolumeContext();
            obj.deserialize(params.HostVolume)
            this.HostVolume = obj;
        }

    }
}

/**
 * Node tag information.
 * @class
 */
class NodeMark extends  AbstractModel {
    constructor(){
        super();

        /**
         * Node type: master, core, task, router.
         * @type {string || null}
         */
        this.NodeType = null;

        /**
         * Node tag information: currently used only in the Terraform. It serves as an input parameter to differentiate information of nodes with the same type.
         * @type {Array.<string> || null}
         */
        this.NodeNames = null;

        /**
         * Availability zone name.
         * @type {string || null}
         */
        this.Zone = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NodeType = 'NodeType' in params ? params.NodeType : null;
        this.NodeNames = 'NodeNames' in params ? params.NodeNames : null;
        this.Zone = 'Zone' in params ? params.Zone : null;

    }
}

/**
 * DescribeResourceSchedule response structure.
 * @class
 */
class DescribeResourceScheduleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether to enable the resource scheduling feature
         * @type {boolean || null}
         */
        this.OpenSwitch = null;

        /**
         * The resource scheduler in service
         * @type {string || null}
         */
        this.Scheduler = null;

        /**
         * Fair Scheduler information
         * @type {string || null}
         */
        this.FSInfo = null;

        /**
         * Capacity Scheduler information
         * @type {string || null}
         */
        this.CSInfo = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.OpenSwitch = 'OpenSwitch' in params ? params.OpenSwitch : null;
        this.Scheduler = 'Scheduler' in params ? params.Scheduler : null;
        this.FSInfo = 'FSInfo' in params ? params.FSInfo : null;
        this.CSInfo = 'CSInfo' in params ? params.CSInfo : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * User management list filter
 * @class
 */
class UserManagerFilter extends  AbstractModel {
    constructor(){
        super();

        /**
         * Username.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * User source.
         * @type {string || null}
         */
        this.UserType = null;

        /**
         * Group name.
         * @type {string || null}
         */
        this.Groups = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.UserType = 'UserType' in params ? params.UserType : null;
        this.Groups = 'Groups' in params ? params.Groups : null;

    }
}

/**
 * Multi-cloud disk parameters
 * @class
 */
class MultiDisk extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cloud disk type.
<li>CLOUD_SSD: Cloud SSD.</li>
<li>CLOUD_PREMIUM: Premium Cloud Disk.</li>
<li>CLOUD_HSSD: Enhanced SSD.</li>
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Cloud disk size.
         * @type {number || null}
         */
        this.Volume = null;

        /**
         * Number of cloud disks of this type.
         * @type {number || null}
         */
        this.Count = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.Volume = 'Volume' in params ? params.Volume : null;
        this.Count = 'Count' in params ? params.Count : null;

    }
}

/**
 * Node renewal pricing details.
 * @class
 */
class NodeRenewPriceDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Billing type (1: monthly subscription, 3: committed use).
         * @type {number || null}
         */
        this.ChargeType = null;

        /**
         * EMR resource ID.
         * @type {string || null}
         */
        this.EmrResourceId = null;

        /**
         * Node type.
         * @type {string || null}
         */
        this.NodeType = null;

        /**
         * Node private network IP.
         * @type {string || null}
         */
        this.Ip = null;

        /**
         * Current expiration time.
         * @type {string || null}
         */
        this.ExpireTime = null;

        /**
         * Original price.
         * @type {number || null}
         */
        this.OriginalCost = null;

        /**
         * Discount price.
         * @type {number || null}
         */
        this.DiscountCost = null;

        /**
         * Node component renewal pricing list.
         * @type {Array.<RenewPriceDetail> || null}
         */
        this.RenewPriceDetails = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ChargeType = 'ChargeType' in params ? params.ChargeType : null;
        this.EmrResourceId = 'EmrResourceId' in params ? params.EmrResourceId : null;
        this.NodeType = 'NodeType' in params ? params.NodeType : null;
        this.Ip = 'Ip' in params ? params.Ip : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.OriginalCost = 'OriginalCost' in params ? params.OriginalCost : null;
        this.DiscountCost = 'DiscountCost' in params ? params.DiscountCost : null;

        if (params.RenewPriceDetails) {
            this.RenewPriceDetails = new Array();
            for (let z in params.RenewPriceDetails) {
                let obj = new RenewPriceDetail();
                obj.deserialize(params.RenewPriceDetails[z]);
                this.RenewPriceDetails.push(obj);
            }
        }

    }
}

/**
 * Pricing details
 * @class
 */
class PriceDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * The node ID
         * @type {string || null}
         */
        this.ResourceId = null;

        /**
         * The price formula
         * @type {string || null}
         */
        this.Formula = null;

        /**
         * The original price
         * @type {number || null}
         */
        this.OriginalCost = null;

        /**
         * The discount price
         * @type {number || null}
         */
        this.DiscountCost = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceId = 'ResourceId' in params ? params.ResourceId : null;
        this.Formula = 'Formula' in params ? params.Formula : null;
        this.OriginalCost = 'OriginalCost' in params ? params.OriginalCost : null;
        this.DiscountCost = 'DiscountCost' in params ? params.DiscountCost : null;

    }
}

/**
 * Rule trigger condition.
 * @class
 */
class TriggerCondition extends  AbstractModel {
    constructor(){
        super();

        /**
         * Conditional comparison method. 1: greater than, 2: less than, 3: greater than or equal to, 4: less than or equal to
         * @type {number || null}
         */
        this.CompareMethod = null;

        /**
         * Conditional threshold.
         * @type {number || null}
         */
        this.Threshold = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CompareMethod = 'CompareMethod' in params ? params.CompareMethod : null;
        this.Threshold = 'Threshold' in params ? params.Threshold : null;

    }
}

/**
 * Inspection task parameter.
 * @class
 */
class TaskSettings extends  AbstractModel {
    constructor(){
        super();

        /**
         * Parameter name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Parameter value.
         * @type {string || null}
         */
        this.Value = null;

        /**
         * Unique parameter identifier.
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Whether it is editable, "true" or "false".
         * @type {string || null}
         */
        this.Editable = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Value = 'Value' in params ? params.Value : null;
        this.Key = 'Key' in params ? params.Key : null;
        this.Editable = 'Editable' in params ? params.Editable : null;

    }
}

/**
 * Metric tag.
 * @class
 */
class MetricTags extends  AbstractModel {
    constructor(){
        super();

        /**
         * Metric Unit.
         * @type {string || null}
         */
        this.Unit = null;

        /**
         * Metric type.
         * @type {string || null}
         */
        this.Type = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Unit = 'Unit' in params ? params.Unit : null;
        this.Type = 'Type' in params ? params.Type : null;

    }
}

/**
 * Node disk type.
 * @class
 */
class NodeSpecDisk extends  AbstractModel {
    constructor(){
        super();

        /**
         * Quantity.
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Disk type.
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Specified disk size.
         * @type {number || null}
         */
        this.DefaultDiskSize = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Count = 'Count' in params ? params.Count : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.DefaultDiskSize = 'DefaultDiskSize' in params ? params.DefaultDiskSize : null;

    }
}

/**
 * Return of HBase TableMetric overview
 * @class
 */
class OverviewRow extends  AbstractModel {
    constructor(){
        super();

        /**
         * Table name
         * @type {string || null}
         */
        this.Table = null;

        /**
         * Number of read requests
         * @type {number || null}
         */
        this.ReadRequestCount = null;

        /**
         * Number of write requests
         * @type {number || null}
         */
        this.WriteRequestCount = null;

        /**
         * Current memstore size
         * @type {number || null}
         */
        this.MemstoreSize = null;

        /**
         * Size of StoreFile in the current region
         * @type {number || null}
         */
        this.StoreFileSize = null;

        /**
         * Regions. Click to jump.
         * @type {string || null}
         */
        this.Operation = null;

        /**
         * StoreFile quantity. 
         * @type {number || null}
         */
        this.StoreFileNum = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Table = 'Table' in params ? params.Table : null;
        this.ReadRequestCount = 'ReadRequestCount' in params ? params.ReadRequestCount : null;
        this.WriteRequestCount = 'WriteRequestCount' in params ? params.WriteRequestCount : null;
        this.MemstoreSize = 'MemstoreSize' in params ? params.MemstoreSize : null;
        this.StoreFileSize = 'StoreFileSize' in params ? params.StoreFileSize : null;
        this.Operation = 'Operation' in params ? params.Operation : null;
        this.StoreFileNum = 'StoreFileNum' in params ? params.StoreFileNum : null;

    }
}

/**
 * Node component renewal pricing details.
 * @class
 */
class RenewPriceDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Billing item name.
         * @type {string || null}
         */
        this.BillingName = null;

        /**
         * Discount.
         * @type {number || null}
         */
        this.Policy = null;

        /**
         * Quantity.
         * @type {number || null}
         */
        this.Quantity = null;

        /**
         * Original price.
         * @type {number || null}
         */
        this.OriginalCost = null;

        /**
         * Discount price.
         * @type {number || null}
         */
        this.DiscountCost = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BillingName = 'BillingName' in params ? params.BillingName : null;
        this.Policy = 'Policy' in params ? params.Policy : null;
        this.Quantity = 'Quantity' in params ? params.Quantity : null;
        this.OriginalCost = 'OriginalCost' in params ? params.OriginalCost : null;
        this.DiscountCost = 'DiscountCost' in params ? params.DiscountCost : null;

    }
}

/**
 * ModifyResourceScheduler request structure.
 * @class
 */
class ModifyResourceSchedulerRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * EMR cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The original scheduler: `fair`
         * @type {string || null}
         */
        this.OldValue = null;

        /**
         * The new scheduler: `capacity`
         * @type {string || null}
         */
        this.NewValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.OldValue = 'OldValue' in params ? params.OldValue : null;
        this.NewValue = 'NewValue' in params ? params.NewValue : null;

    }
}

/**
 * Table schema information
 * @class
 */
class TableSchemaItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Column identifier
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Whether it is sortable by this column
         * @type {boolean || null}
         */
        this.Sortable = null;

        /**
         * Whether it is filterable
         * @type {boolean || null}
         */
        this.WithFilter = null;

        /**
         * Filtered candidate set

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.Candidates = null;

        /**
         * Whether it is clickable.
         * @type {boolean || null}
         */
        this.Clickable = null;

        /**
         * Display name.
         * @type {string || null}
         */
        this.Title = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Sortable = 'Sortable' in params ? params.Sortable : null;
        this.WithFilter = 'WithFilter' in params ? params.WithFilter : null;
        this.Candidates = 'Candidates' in params ? params.Candidates : null;
        this.Clickable = 'Clickable' in params ? params.Clickable : null;
        this.Title = 'Title' in params ? params.Title : null;

    }
}

/**
 * Login settings
 * @class
 */
class LoginSettings extends  AbstractModel {
    constructor(){
        super();

        /**
         * The login password of the instance, which contains 8 to 16 uppercase letters, lowercase letters, digits, and special characters (only !@%^*) and cannot start with a special character.
         * @type {string || null}
         */
        this.Password = null;

        /**
         * The key ID. After an instance is associated with a key, you can access it with the private key in the key pair. You can call [DescribeKeyPairs](https://intl.cloud.tencent.com/document/api/213/15699?from_cn_redirect=1) to obtain `PublicKeyId`.
         * @type {string || null}
         */
        this.PublicKeyId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Password = 'Password' in params ? params.Password : null;
        this.PublicKeyId = 'PublicKeyId' in params ? params.PublicKeyId : null;

    }
}

/**
 * ModifyInspectionSettings response structure.
 * @class
 */
class ModifyInspectionSettingsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Description of the returned value.
         * @type {string || null}
         */
        this.Info = null;

        /**
         * ID of the successfully modified inspection task.
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Info = 'Info' in params ? params.Info : null;
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeKyuubiQueryInfo request structure.
 * @class
 */
class DescribeKyuubiQueryInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Query information obtainment start time (seconds).
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * Query information obtainment end time (seconds).
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Page size for pagination query. The minimum value is 1, and the maximum value is 100.
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Page number for pagination queries, starting from 1.
         * @type {number || null}
         */
        this.Page = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.Page = 'Page' in params ? params.Page : null;

    }
}

/**
 * Scheduled scaling of monthly recurring task policy
 * @class
 */
class MonthRepeatStrategy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specific time for repetition task execution, such as 01:02:00.
         * @type {string || null}
         */
        this.ExecuteAtTimeOfDay = null;

        /**
         * Description of time period in days of the month. The length must be 2. For example, [2,10] indicates from the 2nd day to the 10th day every month.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<number> || null}
         */
        this.DaysOfMonthRange = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ExecuteAtTimeOfDay = 'ExecuteAtTimeOfDay' in params ? params.ExecuteAtTimeOfDay : null;
        this.DaysOfMonthRange = 'DaysOfMonthRange' in params ? params.DaysOfMonthRange : null;

    }
}

/**
 * ModifyGlobalConfig response structure.
 * @class
 */
class ModifyGlobalConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeNodeResourceConfigFast response structure.
 * @class
 */
class DescribeNodeResourceConfigFastResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Return value of the DescribeResourceConfig API.
         * @type {Array.<DescribeResourceConfig> || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new DescribeResourceConfig();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Rule for time-based scaling
 * @class
 */
class TimeAutoScaleStrategy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Policy name, which is unique within one cluster.
         * @type {string || null}
         */
        this.StrategyName = null;

        /**
         * Cooling time after policy trigger, during which auto scaling cannot be triggered.
         * @type {number || null}
         */
        this.IntervalTime = null;

        /**
         * Scaling action. 1: scale-out, 2: scale-in.
         * @type {number || null}
         */
        this.ScaleAction = null;

        /**
         * Scaling amount.
         * @type {number || null}
         */
        this.ScaleNum = null;

        /**
         * Rule status. 1: valid; 2: invalid; 3: suspended. This field is required.
         * @type {number || null}
         */
        this.StrategyStatus = null;

        /**
         * Rule priority. The smaller value indicates the higher priority.
         * @type {number || null}
         */
        this.Priority = null;

        /**
         * When multiple rules are triggered at the same time and some are not really executed, retries will be performed within this time range.
         * @type {number || null}
         */
        this.RetryValidTime = null;

        /**
         * Time scaling repetition policy

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {RepeatStrategy || null}
         */
        this.RepeatStrategy = null;

        /**
         * Unique policy ID.
         * @type {number || null}
         */
        this.StrategyId = null;

        /**
         * Graceful scale-in switch.
         * @type {boolean || null}
         */
        this.GraceDownFlag = null;

        /**
         * Graceful scale-in wait time.
         * @type {number || null}
         */
        this.GraceDownTime = null;

        /**
         * Bound tag list

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Preset configuration group.
         * @type {string || null}
         */
        this.ConfigGroupAssigned = null;

        /**
         * Calculation method of scale-out resources. Valid values: "DEFAULT","INSTANCE", "CPU" and "MEMORYGB".
"DEFAULT" indicates the default method, which is the same as "INSTANCE".
"INSTANCE" indicates calculation based on nodes (default mode).
"CPU" indicates calculation based on the quantity of cores of the machine.
"MEMORYGB" indicates calculation based on the memory size of the machine.
         * @type {string || null}
         */
        this.MeasureMethod = null;

        /**
         * Termination policy. "DEFAULT" denotes the default policy, which indicates that scale-in is triggered by scale-in rules. "TIMING" denotes timed destruction.
         * @type {string || null}
         */
        this.TerminatePolicy = null;

        /**
         * Maximum use time in seconds. The minimum value is 1 hour, and the maximum is 24 hours.
         * @type {number || null}
         */
        this.MaxUse = null;

        /**
         * Node deployment service list. Fill in only HDFS and YARN. For details, see [Mapping Table for Component Names](https://intl.cloud.tencent.com/document/product/589/98760?from_cn_redirect=1).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<number> || null}
         */
        this.SoftDeployInfo = null;

        /**
         * Startup process list

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<number> || null}
         */
        this.ServiceNodeInfo = null;

        /**
         * Compensatory scale-out. 0: disable, 1: enable.
         * @type {number || null}
         */
        this.CompensateFlag = null;

        /**
         * Scaling group ID.
         * @type {number || null}
         */
        this.GroupId = null;

        /**
         * Graceful scale-in business pod tag. Nodes are scaled in when the pod mentioned above is not found on the node or the graceful scale-in time is passed.
         * @type {Array.<TkeLabel> || null}
         */
        this.GraceDownLabel = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StrategyName = 'StrategyName' in params ? params.StrategyName : null;
        this.IntervalTime = 'IntervalTime' in params ? params.IntervalTime : null;
        this.ScaleAction = 'ScaleAction' in params ? params.ScaleAction : null;
        this.ScaleNum = 'ScaleNum' in params ? params.ScaleNum : null;
        this.StrategyStatus = 'StrategyStatus' in params ? params.StrategyStatus : null;
        this.Priority = 'Priority' in params ? params.Priority : null;
        this.RetryValidTime = 'RetryValidTime' in params ? params.RetryValidTime : null;

        if (params.RepeatStrategy) {
            let obj = new RepeatStrategy();
            obj.deserialize(params.RepeatStrategy)
            this.RepeatStrategy = obj;
        }
        this.StrategyId = 'StrategyId' in params ? params.StrategyId : null;
        this.GraceDownFlag = 'GraceDownFlag' in params ? params.GraceDownFlag : null;
        this.GraceDownTime = 'GraceDownTime' in params ? params.GraceDownTime : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.ConfigGroupAssigned = 'ConfigGroupAssigned' in params ? params.ConfigGroupAssigned : null;
        this.MeasureMethod = 'MeasureMethod' in params ? params.MeasureMethod : null;
        this.TerminatePolicy = 'TerminatePolicy' in params ? params.TerminatePolicy : null;
        this.MaxUse = 'MaxUse' in params ? params.MaxUse : null;
        this.SoftDeployInfo = 'SoftDeployInfo' in params ? params.SoftDeployInfo : null;
        this.ServiceNodeInfo = 'ServiceNodeInfo' in params ? params.ServiceNodeInfo : null;
        this.CompensateFlag = 'CompensateFlag' in params ? params.CompensateFlag : null;
        this.GroupId = 'GroupId' in params ? params.GroupId : null;

        if (params.GraceDownLabel) {
            this.GraceDownLabel = new Array();
            for (let z in params.GraceDownLabel) {
                let obj = new TkeLabel();
                obj.deserialize(params.GraceDownLabel[z]);
                this.GraceDownLabel.push(obj);
            }
        }

    }
}

/**
 * ModifySLInstance request structure.
 * @class
 */
class ModifySLInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance unique identifier (string).
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Region name to be changed.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Target node count after configuration change in this region. The total number of nodes across all regions should be greater than or equal to 3 and less than or equal to 50.
         * @type {number || null}
         */
        this.NodeNum = null;

        /**
         * The unique random identifier with a time efficiency of 5 minutes, which needs to be specified by the caller to prevent the client from creating resources repeatedly. For example: a9a90aa6-****-****-****-fae360632808.
         * @type {string || null}
         */
        this.ClientToken = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.NodeNum = 'NodeNum' in params ? params.NodeNum : null;
        this.ClientToken = 'ClientToken' in params ? params.ClientToken : null;

    }
}

/**
 * DescribeInsightList response structure.
 * @class
 */
class DescribeInsightListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number, which is used for pagination query.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Insight result array.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<InsightResult> || null}
         */
        this.ResultList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.ResultList) {
            this.ResultList = new Array();
            for (let z in params.ResultList) {
                let obj = new InsightResult();
                obj.deserialize(params.ResultList[z]);
                this.ResultList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Shared self-built component parameters
 * @class
 */
class CustomServiceDefine extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom parameter key
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Custom parameter value
         * @type {string || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * Output results of user groups.
 * @class
 */
class ResultItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * User group name.
         * @type {string || null}
         */
        this.Item = null;

        /**
         * Whether the user group is created successfully.
         * @type {boolean || null}
         */
        this.Result = null;

        /**
         * Specify the reason for the failure in the case of creation failure.
         * @type {string || null}
         */
        this.Reason = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Item = 'Item' in params ? params.Item : null;
        this.Result = 'Result' in params ? params.Result : null;
        this.Reason = 'Reason' in params ? params.Reason : null;

    }
}

/**
 * Task step details
 * @class
 */
class StageInfoDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Steps.
         * @type {string || null}
         */
        this.Stage = null;

        /**
         * Step name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Indicates whether to display
         * @type {boolean || null}
         */
        this.IsShow = null;

        /**
         * Whether it is a subprocess
         * @type {boolean || null}
         */
        this.IsSubFlow = null;

        /**
         * Subprocess tag.
         * @type {string || null}
         */
        this.SubFlowFlag = null;

        /**
         * Step execution status. 0: not started, 1: in progress, 2: completed, 3: partially completed, -1: failed
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Step running status description.
         * @type {string || null}
         */
        this.Desc = null;

        /**
         * Running progress.
         * @type {number || null}
         */
        this.Progress = null;

        /**
         * Start time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Starttime = null;

        /**
         * End time

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Endtime = null;

        /**
         * Whether details are included.
         * @type {boolean || null}
         */
        this.HadWoodDetail = null;

        /**
         * Wood subprocess ID.
         * @type {number || null}
         */
        this.WoodJobId = null;

        /**
         * Multi-language version key.
         * @type {string || null}
         */
        this.LanguageKey = null;

        /**
         * Reason for stage failure.
         * @type {string || null}
         */
        this.FailedReason = null;

        /**
         * Step duration.
         * @type {string || null}
         */
        this.TimeConsuming = null;

        /**
         * 
         * @type {number || null}
         */
        this.Id = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Stage = 'Stage' in params ? params.Stage : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.IsShow = 'IsShow' in params ? params.IsShow : null;
        this.IsSubFlow = 'IsSubFlow' in params ? params.IsSubFlow : null;
        this.SubFlowFlag = 'SubFlowFlag' in params ? params.SubFlowFlag : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Desc = 'Desc' in params ? params.Desc : null;
        this.Progress = 'Progress' in params ? params.Progress : null;
        this.Starttime = 'Starttime' in params ? params.Starttime : null;
        this.Endtime = 'Endtime' in params ? params.Endtime : null;
        this.HadWoodDetail = 'HadWoodDetail' in params ? params.HadWoodDetail : null;
        this.WoodJobId = 'WoodJobId' in params ? params.WoodJobId : null;
        this.LanguageKey = 'LanguageKey' in params ? params.LanguageKey : null;
        this.FailedReason = 'FailedReason' in params ? params.FailedReason : null;
        this.TimeConsuming = 'TimeConsuming' in params ? params.TimeConsuming : null;
        this.Id = 'Id' in params ? params.Id : null;

    }
}

/**
 * CreateCluster response structure.
 * @class
 */
class CreateClusterResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeAutoScaleRecords response structure.
 * @class
 */
class DescribeAutoScaleRecordsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total scale-in and scale-out records.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Record list.
         * @type {Array.<AutoScaleRecord> || null}
         */
        this.RecordList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.RecordList) {
            this.RecordList = new Array();
            for (let z in params.RecordList) {
                let obj = new AutoScaleRecord();
                obj.deserialize(params.RecordList[z]);
                this.RecordList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyYarnQueueV2 request structure.
 * @class
 */
class ModifyYarnQueueV2Request extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Scheduler type. The values are as follows:

1. capacity
2. fair
         * @type {string || null}
         */
        this.Scheduler = null;

        /**
         * Resource pool data
         * @type {Array.<ConfigModifyInfoV2> || null}
         */
        this.ConfigModifyInfoList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Scheduler = 'Scheduler' in params ? params.Scheduler : null;

        if (params.ConfigModifyInfoList) {
            this.ConfigModifyInfoList = new Array();
            for (let z in params.ConfigModifyInfoList) {
                let obj = new ConfigModifyInfoV2();
                obj.deserialize(params.ConfigModifyInfoList[z]);
                this.ConfigModifyInfoList.push(obj);
            }
        }

    }
}

/**
 * ModifyUserGroup response structure.
 * @class
 */
class ModifyUserGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DAG information.
 * @class
 */
class DAGInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Query ID.
         * @type {string || null}
         */
        this.ID = null;

        /**
         * DAG type. Only StarRocks is supported currently.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Returned JSON string of the DAG.
         * @type {string || null}
         */
        this.Content = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ID = 'ID' in params ? params.ID : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.Content = 'Content' in params ? params.Content : null;

    }
}

/**
 * CreateCluster request structure.
 * @class
 */
class CreateClusterRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The EMR version, such as `EMR-V2.3.0` that indicates the version 2.3.0 of EMR. You can query the EMR version [here](https://intl.cloud.tencent.com/document/product/589/66338?from_cn_redirect=1).
         * @type {string || null}
         */
        this.ProductVersion = null;

        /**
         * Whether to enable high availability for nodes. Valid values:
<li>`true`: Enable</li>
<li>`false`: Disable</li>
         * @type {boolean || null}
         */
        this.EnableSupportHAFlag = null;

        /**
         * The instance name.
<li>Length limit: 6-36 characters.</li>
<li>Can contain only Chinese characters, letters, digits, hyphens (-), and underscores (_).</li>
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * The instance billing mode. Valid values:
<li>`POSTPAID_BY_HOUR`: The postpaid mode by hour.</li>
         * @type {string || null}
         */
        this.InstanceChargeType = null;

        /**
         * The instance login setting. This parameter allows you to set a login password or key for your purchased node.
<li>If a key is set, the password will be used for login to the native component WebUI only.</li>
<li>If no key is set, the password will be used for login to all purchased nodes and the native component WebUI.</li>
         * @type {LoginSettings || null}
         */
        this.LoginSettings = null;

        /**
         * The configuration of cluster application scenario and supported components.
         * @type {SceneSoftwareConfig || null}
         */
        this.SceneSoftwareConfig = null;

        /**
         * The details of the monthly subscription, including the instance period and auto-renewal. It is required if `InstanceChargeType` is `PREPAID`.
         * @type {InstanceChargePrepaid || null}
         */
        this.InstanceChargePrepaid = null;

        /**
         * The ID of the security group to which the instance belongs, in the format of `sg-xxxxxxxx`. You can call the [DescribeSecurityGroups](https://intl.cloud.tencent.com/document/api/215/15808?from_cn_redirect=1) API and obtain this parameter from the `SecurityGroupId` field in the response.
         * @type {Array.<string> || null}
         */
        this.SecurityGroupIds = null;

        /**
         * The [Bootstrap action](https://intl.cloud.tencent.com/document/product/589/35656?from_cn_redirect=1) script settings.
         * @type {Array.<ScriptBootstrapActionConfig> || null}
         */
        this.ScriptBootstrapActionConfig = null;

        /**
         * Unique random identifier with the time efficiency of 5 minutes, which needs to be specified by the caller to prevent the client from repeatedly creating resources, for example, a9a90aa6-****-****-****-fae360632808.
         * @type {string || null}
         */
        this.ClientToken = null;

        /**
         * Whether to enable public IP access for master nodes. Valid values:
<li>`NEED_MASTER_WAN`: Enable public IP for master nodes.</li>
<li>`NOT_NEED_MASTER_WAN`: Disable.</li>The public IP is enabled for master nodes by default.
         * @type {string || null}
         */
        this.NeedMasterWan = null;

        /**
         * Whether to enable remote login over the public network. It is invalid if `SecurityGroupId` is passed in. It is disabled by default. Valid values:
<li>`true`: Enable</li>
<li>`false`: Disable</li>
         * @type {boolean || null}
         */
        this.EnableRemoteLoginFlag = null;

        /**
         * Whether to enable Kerberos authentication. Valid values:
<li>`true`: Enable</li>
<li>`false` (default): Disable</li>
         * @type {boolean || null}
         */
        this.EnableKerberosFlag = null;

        /**
         * [Custom software configuration](https://intl.cloud.tencent.com/document/product/589/35655?from_cn_redirect=1?from_cn_redirect=1)
         * @type {string || null}
         */
        this.CustomConf = null;

        /**
         * The tag description list. This parameter is used to bind a tag to a resource instance.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * The list of spread placement group IDs. Only one can be specified.
You can call the [DescribeDisasterRecoverGroups](https://intl.cloud.tencent.com/document/product/213/17810?from_cn_redirect=1) API and obtain this parameter from the `DisasterRecoverGroupId` field in the response.
         * @type {Array.<string> || null}
         */
        this.DisasterRecoverGroupIds = null;

        /**
         * Whether to enable the cluster-level CBS encryption. Valid values:
<li>`true`: Enable</li>
<li>`false` (default): Disable</li>
         * @type {boolean || null}
         */
        this.EnableCbsEncryptFlag = null;

        /**
         * The metadatabase information. If `MetaType` is `EMR_NEW_META`, `MetaDataJdbcUrl`, `MetaDataUser`, `MetaDataPass`, and `UnifyMetaInstanceId` are not required.
If `MetaType` is `EMR_EXIT_META`, `UnifyMetaInstanceId` is required.
If `MetaType` is `USER_CUSTOM_META`, `MetaDataJdbcUrl`, `MetaDataUser`, and `MetaDataPass` are required.
         * @type {CustomMetaDBInfo || null}
         */
        this.MetaDBInfo = null;

        /**
         * The shared component information.
         * @type {Array.<DependService> || null}
         */
        this.DependService = null;

        /**
         * The node resource specs. A spec is specified for each AZ, with the first spec for the primary AZ, the second for the backup AZ, and the third for the arbitrator AZ. If the multi-AZ mode is not enabled, only one spec is required.
         * @type {Array.<ZoneResourceConfiguration> || null}
         */
        this.ZoneResourceConfiguration = null;

        /**
         * COS bucket path, which is used when you create StarRocks compute-storage separation clusters.
         * @type {string || null}
         */
        this.CosBucket = null;

        /**
         * Node identifier information: currently used only in Terraform.
         * @type {Array.<NodeMark> || null}
         */
        this.NodeMarks = null;

        /**
         * clb id
         * @type {string || null}
         */
        this.LoadBalancerId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProductVersion = 'ProductVersion' in params ? params.ProductVersion : null;
        this.EnableSupportHAFlag = 'EnableSupportHAFlag' in params ? params.EnableSupportHAFlag : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.InstanceChargeType = 'InstanceChargeType' in params ? params.InstanceChargeType : null;

        if (params.LoginSettings) {
            let obj = new LoginSettings();
            obj.deserialize(params.LoginSettings)
            this.LoginSettings = obj;
        }

        if (params.SceneSoftwareConfig) {
            let obj = new SceneSoftwareConfig();
            obj.deserialize(params.SceneSoftwareConfig)
            this.SceneSoftwareConfig = obj;
        }

        if (params.InstanceChargePrepaid) {
            let obj = new InstanceChargePrepaid();
            obj.deserialize(params.InstanceChargePrepaid)
            this.InstanceChargePrepaid = obj;
        }
        this.SecurityGroupIds = 'SecurityGroupIds' in params ? params.SecurityGroupIds : null;

        if (params.ScriptBootstrapActionConfig) {
            this.ScriptBootstrapActionConfig = new Array();
            for (let z in params.ScriptBootstrapActionConfig) {
                let obj = new ScriptBootstrapActionConfig();
                obj.deserialize(params.ScriptBootstrapActionConfig[z]);
                this.ScriptBootstrapActionConfig.push(obj);
            }
        }
        this.ClientToken = 'ClientToken' in params ? params.ClientToken : null;
        this.NeedMasterWan = 'NeedMasterWan' in params ? params.NeedMasterWan : null;
        this.EnableRemoteLoginFlag = 'EnableRemoteLoginFlag' in params ? params.EnableRemoteLoginFlag : null;
        this.EnableKerberosFlag = 'EnableKerberosFlag' in params ? params.EnableKerberosFlag : null;
        this.CustomConf = 'CustomConf' in params ? params.CustomConf : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.DisasterRecoverGroupIds = 'DisasterRecoverGroupIds' in params ? params.DisasterRecoverGroupIds : null;
        this.EnableCbsEncryptFlag = 'EnableCbsEncryptFlag' in params ? params.EnableCbsEncryptFlag : null;

        if (params.MetaDBInfo) {
            let obj = new CustomMetaDBInfo();
            obj.deserialize(params.MetaDBInfo)
            this.MetaDBInfo = obj;
        }

        if (params.DependService) {
            this.DependService = new Array();
            for (let z in params.DependService) {
                let obj = new DependService();
                obj.deserialize(params.DependService[z]);
                this.DependService.push(obj);
            }
        }

        if (params.ZoneResourceConfiguration) {
            this.ZoneResourceConfiguration = new Array();
            for (let z in params.ZoneResourceConfiguration) {
                let obj = new ZoneResourceConfiguration();
                obj.deserialize(params.ZoneResourceConfiguration[z]);
                this.ZoneResourceConfiguration.push(obj);
            }
        }
        this.CosBucket = 'CosBucket' in params ? params.CosBucket : null;

        if (params.NodeMarks) {
            this.NodeMarks = new Array();
            for (let z in params.NodeMarks) {
                let obj = new NodeMark();
                obj.deserialize(params.NodeMarks[z]);
                this.NodeMarks.push(obj);
            }
        }
        this.LoadBalancerId = 'LoadBalancerId' in params ? params.LoadBalancerId : null;

    }
}

/**
 * AddMetricScaleStrategy response structure.
 * @class
 */
class AddMetricScaleStrategyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteGroupsSTD response structure.
 * @class
 */
class DeleteGroupsSTDResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Deleting returned results.
         * @type {Array.<ResultItem> || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new ResultItem();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeNodeResourceConfigFast request structure.
 * @class
 */
class DescribeNodeResourceConfigFastRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Node type, CORE, TASK, ROUTER or ALL.
         * @type {string || null}
         */
        this.ResourceType = null;

        /**
         * Billing type.
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Availability zone ID.
         * @type {number || null}
         */
        this.ZoneId = null;

        /**
         * The type can be ComputeResource, EMR, or a default value. The default value is EMR.
         * @type {string || null}
         */
        this.ResourceBaseType = null;

        /**
         * Computing resource ID.
         * @type {string || null}
         */
        this.ComputeResourceId = null;

        /**
         * Hardware type.
         * @type {string || null}
         */
        this.HardwareResourceType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.ResourceBaseType = 'ResourceBaseType' in params ? params.ResourceBaseType : null;
        this.ComputeResourceId = 'ComputeResourceId' in params ? params.ComputeResourceId : null;
        this.HardwareResourceType = 'HardwareResourceType' in params ? params.HardwareResourceType : null;

    }
}

/**
 * Specifications management, which includes specifications type descriptions.
 * @class
 */
class NodeResource extends  AbstractModel {
    constructor(){
        super();

        /**
         * Configuration ID.
         * @type {number || null}
         */
        this.ResourceConfigId = null;

        /**
         * Resource
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Resource || null}
         */
        this.Resource = null;

        /**
         * Creation time.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Update time.
         * @type {string || null}
         */
        this.UpdateTime = null;

        /**
         * Whether default configuration applies, DEFAULT or BACKUP.
         * @type {string || null}
         */
        this.IsDefault = null;

        /**
         * Remaining of this type.
         * @type {number || null}
         */
        this.MaxResourceNum = null;

        /**
         * Supported committed use duration.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<number> || null}
         */
        this.PrepaidUnderwritePeriods = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceConfigId = 'ResourceConfigId' in params ? params.ResourceConfigId : null;

        if (params.Resource) {
            let obj = new Resource();
            obj.deserialize(params.Resource)
            this.Resource = obj;
        }
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.UpdateTime = 'UpdateTime' in params ? params.UpdateTime : null;
        this.IsDefault = 'IsDefault' in params ? params.IsDefault : null;
        this.MaxResourceNum = 'MaxResourceNum' in params ? params.MaxResourceNum : null;
        this.PrepaidUnderwritePeriods = 'PrepaidUnderwritePeriods' in params ? params.PrepaidUnderwritePeriods : null;

    }
}

/**
 * Global parameter information of all scaling groups in the cluster.
 * @class
 */
class GroupGlobalConfs extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {AutoScaleResourceConf || null}
         */
        this.GroupGlobalConf = null;

        /**
         * Number of nodes scaled out in the current scaling group.
         * @type {number || null}
         */
        this.CurrentNodes = null;

        /**
         * Number of postpaid nodes scaled out in the current scaling group.
         * @type {number || null}
         */
        this.CurrentPostPaidNodes = null;

        /**
         * Number of spot instance nodes scaled out in the current scaling group.
         * @type {number || null}
         */
        this.CurrentSpotPaidNodes = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.GroupGlobalConf) {
            let obj = new AutoScaleResourceConf();
            obj.deserialize(params.GroupGlobalConf)
            this.GroupGlobalConf = obj;
        }
        this.CurrentNodes = 'CurrentNodes' in params ? params.CurrentNodes : null;
        this.CurrentPostPaidNodes = 'CurrentPostPaidNodes' in params ? params.CurrentPostPaidNodes : null;
        this.CurrentSpotPaidNodes = 'CurrentSpotPaidNodes' in params ? params.CurrentSpotPaidNodes : null;

    }
}

/**
 * Description order, which is used for sorting.
 * @class
 */
class Order extends  AbstractModel {
    constructor(){
        super();

        /**
         * Order field.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Desc or Asc.
         * @type {string || null}
         */
        this.Direction = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Direction = 'Direction' in params ? params.Direction : null;

    }
}

/**
 * DescribeInspectionTaskResult response structure.
 * @class
 */
class DescribeInspectionTaskResultResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Inspection task record, encoded in Base64 format.
         * @type {string || null}
         */
        this.InspectionResultInfo = null;

        /**
         * The total number of records.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * Category information encoded in Base64 format, which includes {"FixedTime": "Fixed time", "RealTime": "Real time"}.
         * @type {string || null}
         */
        this.TypeInfo = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InspectionResultInfo = 'InspectionResultInfo' in params ? params.InspectionResultInfo : null;
        this.Total = 'Total' in params ? params.Total : null;
        this.TypeInfo = 'TypeInfo' in params ? params.TypeInfo : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeClusterNodes request structure.
 * @class
 */
class DescribeClusterNodesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster instance ID in the format of emr-xxxxxxxx
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Node flag. Valid values:
<li>all: gets the information of nodes in all types except TencentDB information.</li>
<li>master: gets master node information.</li>
<li>core: gets core node information.</li>
<li>task: gets task node information.</li>
<li>common: gets common node information.</li>
<li>router: gets router node information.</li>
<li>db: gets TencentDB information in normal status.</li>
Note: only the above values are supported for the time being. Entering other values will cause errors.
         * @type {string || null}
         */
        this.NodeFlag = null;

        /**
         * Whether to carry CDB information when all node information is exported in CSV format.
         * @type {boolean || null}
         */
        this.ExportDb = null;

        /**
         * Page number. Default value: 0, indicating the first page.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of records to be returned per page. The default value is 100, and the maximum value is 100.
If both offset and limit are not set, or both are set to 0, all data will be returned.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Resource type. Valid values: all, host, pod. Default value: all
         * @type {string || null}
         */
        this.HardwareResourceType = null;

        /**
         * Searchable field
         * @type {Array.<SearchItem> || null}
         */
        this.SearchFields = null;

        /**
         * Order field.
         * @type {string || null}
         */
        this.OrderField = null;

        /**
         * Ascending or not. 1: ascending; 0: descending.
         * @type {number || null}
         */
        this.Asc = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.NodeFlag = 'NodeFlag' in params ? params.NodeFlag : null;
        this.ExportDb = 'ExportDb' in params ? params.ExportDb : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.HardwareResourceType = 'HardwareResourceType' in params ? params.HardwareResourceType : null;

        if (params.SearchFields) {
            this.SearchFields = new Array();
            for (let z in params.SearchFields) {
                let obj = new SearchItem();
                obj.deserialize(params.SearchFields[z]);
                this.SearchFields.push(obj);
            }
        }
        this.OrderField = 'OrderField' in params ? params.OrderField : null;
        this.Asc = 'Asc' in params ? params.Asc : null;

    }
}

/**
 * Target processes
 * @class
 */
class ComponentBasicRestartInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Process name which is required, such as NameNode.
         * @type {string || null}
         */
        this.ComponentName = null;

        /**
         * The target IP list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.IpList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ComponentName = 'ComponentName' in params ? params.ComponentName : null;
        this.IpList = 'IpList' in params ? params.IpList : null;

    }
}

/**
 * CreateInstance request structure.
 * @class
 */
class CreateInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Product ID. Different product IDs stand for different EMR product versions. Valid range:
51: STARROCKS-V1.4.0
54: STARROCKS-V2.0.0
27: KAFKA-V1.0.0
50: KAFKA-V2.0.0
16: EMR-V2.3.0
20: EMR-V2.5.0
30: EMR-V2.6.0
38: EMR-V2.7.0
25: EMR-V3.1.0
33: EMR-V3.2.1
34: EMR-V3.3.0
37: EMR-V3.4.0
44: EMR-V3.5.0
53: EMR-V3.6.0
         * @type {number || null}
         */
        this.ProductId = null;

        /**
         * List of deployed components. The list of component options varies by EMR product ID (i.e., `ProductId`; for specific meanings, please see the `ProductId` input parameter). For more information, please see [Component Version](https://intl.cloud.tencent.com/document/product/589/20279?from_cn_redirect=1).
Enter an instance value: `hive` or `flink`.
         * @type {Array.<string> || null}
         */
        this.Software = null;

        /**
         * Whether to enable high node availability. Valid values:
<li>0: does not enable high availability of node.</li>
<li>1: enables high availability of node.</li>
         * @type {number || null}
         */
        this.SupportHA = null;

        /**
         * Instance name.
<li>Length limit: 6-36 characters.</li>
<li>Only letters, numbers, dashes (-), and underscores (_) are supported.</li>
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Instance billing mode. Valid values:
<li>0: pay-as-you-go.</li>
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Purchase duration of instance, which needs to be used together with `TimeUnit`.
<li>When `TimeUnit` is `s`, this parameter can only be filled with 3600, indicating a pay-as-you-go instance.</li>
<li>When `TimeUnit` is `m`, the number entered in this parameter indicates the purchase duration of the monthly-subscription instance; for example, 1 means one month</li>
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         * Time unit of instance purchase duration. Valid values:
<li>s: seconds. When `PayMode` is 0, `TimeUnit` can only be `s`.</li>
<li>m: month. When `PayMode` is 1, `TimeUnit` can only be `m`.</li>
         * @type {string || null}
         */
        this.TimeUnit = null;

        /**
         * Instance login settings. This parameter allows you to set the login password or key for your purchased node.
<li>If the key is set, the password will be only used for login to the native component WebUI.</li>
<li>If the key is not set, the password will be used for login to all purchased nodes and the native component WebUI.</li>
         * @type {LoginSettings || null}
         */
        this.LoginSettings = null;

        /**
         * Configuration information of VPC. This parameter is used to specify the VPC ID, subnet ID, etc.
         * @type {VPCSettings || null}
         */
        this.VPCSettings = null;

        /**
         * Node resource specification.
         * @type {NewResourceSpec || null}
         */
        this.ResourceSpec = null;

        /**
         * Parameter required for enabling COS access.
         * @type {COSSettings || null}
         */
        this.COSSettings = null;

        /**
         * Instance location. This parameter is used to specify the AZ, project, and other attributes of the instance.
         * @type {Placement || null}
         */
        this.Placement = null;

        /**
         * Security group to which an instance belongs in the format of `sg-xxxxxxxx`. This parameter can be obtained from the `SecurityGroupId` field in the return value of the [DescribeSecurityGroups](https://intl.cloud.tencent.com/document/api/215/15808) API.
         * @type {string || null}
         */
        this.SgId = null;

        /**
         * [Bootstrap action](https://intl.cloud.tencent.com/document/product/589/35656?from_cn_redirect=1) script settings
         * @type {Array.<PreExecuteFileSettings> || null}
         */
        this.PreExecutedFileSettings = null;

        /**
         * Whether auto-renewal is enabled. Valid values:
<li>0: auto-renewal not enabled.</li>
<li>1: auto-renewal enabled.</li>
         * @type {number || null}
         */
        this.AutoRenew = null;

        /**
         * Unique random identifier with the time efficiency of 5 minutes, which needs to be specified by the caller to prevent the client from creating resources again, for example, a9a90aa6-****-****-****-fae36063280.
         * @type {string || null}
         */
        this.ClientToken = null;

        /**
         * Whether to enable public IP access for master node. Valid values:
<li>NEED_MASTER_WAN: enables public IP for master node.</li>
<li>NOT_NEED_MASTER_WAN: does not enable.</li>Public IP is enabled for master node by default.
         * @type {string || null}
         */
        this.NeedMasterWan = null;

        /**
         * Whether to enable remote public network login, i.e., port 22. When `SgId` is not empty, this parameter does not take effect.
         * @type {number || null}
         */
        this.RemoteLoginAtCreate = null;

        /**
         * Whether to enable secure cluster. 0: no; other values: yes.
         * @type {number || null}
         */
        this.CheckSecurity = null;

        /**
         * Accesses to external file system.
         * @type {string || null}
         */
        this.ExtendFsField = null;

        /**
         * Tag description list. This parameter is used to bind a tag to a resource instance.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * List of spread placement group IDs. Only one can be specified currently.
This parameter can be obtained in the `SecurityGroupId` field in the return value of the [DescribeSecurityGroups](https://intl.cloud.tencent.com/document/product/213/15486?from_cn_redirect=1) API.
         * @type {Array.<string> || null}
         */
        this.DisasterRecoverGroupIds = null;

        /**
         * CBS disk encryption at the cluster level. 0: not encrypted, 1: encrypted
         * @type {number || null}
         */
        this.CbsEncrypt = null;

        /**
         * Hive-shared metadatabase type. Valid values:
<li>EMR_DEFAULT_META: the cluster creates one by default.</li>
<li>EMR_EXIST_META: the cluster uses the specified EMR-MetaDB instance.</li>
<li>USER_CUSTOM_META: the cluster uses a custom MetaDB instance.</li>
         * @type {string || null}
         */
        this.MetaType = null;

        /**
         * EMR-MetaDB instance
         * @type {string || null}
         */
        this.UnifyMetaInstanceId = null;

        /**
         * Custom MetaDB instance information
         * @type {CustomMetaInfo || null}
         */
        this.MetaDBInfo = null;

        /**
         * Custom application role.
         * @type {string || null}
         */
        this.ApplicationRole = null;

        /**
         * Scenario-based values:
Hadoop-Kudu
Hadoop-Zookeeper
Hadoop-Presto
Hadoop-Hbase
         * @type {string || null}
         */
        this.SceneName = null;

        /**
         * Shared component information
         * @type {Array.<ExternalService> || null}
         */
        this.ExternalService = null;

        /**
         * 
         * @type {number || null}
         */
        this.VersionID = null;

        /**
         * `true` indicates that the multi-AZ deployment mode is enabled. This parameter is available only in cluster creation and cannot be changed after setting.
         * @type {boolean || null}
         */
        this.MultiZone = null;

        /**
         * Node resource specs. The actual number of AZs is set, with the first AZ as the primary AZ, the second as the backup AZ, and the third as the arbitrator AZ. If the multi-AZ mode is not enabled, set the value to `1`.
         * @type {Array.<MultiZoneSetting> || null}
         */
        this.MultiZoneSettings = null;

        /**
         * COS bucket path, which is used when you create StarRocks compute-storage separation clusters.
         * @type {string || null}
         */
        this.CosBucket = null;

        /**
         * Node identifier information: currently used only in Terraform.
         * @type {Array.<NodeMark> || null}
         */
        this.NodeMarks = null;

        /**
         * CLB id
         * @type {string || null}
         */
        this.LoadBalancerId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProductId = 'ProductId' in params ? params.ProductId : null;
        this.Software = 'Software' in params ? params.Software : null;
        this.SupportHA = 'SupportHA' in params ? params.SupportHA : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;
        this.TimeUnit = 'TimeUnit' in params ? params.TimeUnit : null;

        if (params.LoginSettings) {
            let obj = new LoginSettings();
            obj.deserialize(params.LoginSettings)
            this.LoginSettings = obj;
        }

        if (params.VPCSettings) {
            let obj = new VPCSettings();
            obj.deserialize(params.VPCSettings)
            this.VPCSettings = obj;
        }

        if (params.ResourceSpec) {
            let obj = new NewResourceSpec();
            obj.deserialize(params.ResourceSpec)
            this.ResourceSpec = obj;
        }

        if (params.COSSettings) {
            let obj = new COSSettings();
            obj.deserialize(params.COSSettings)
            this.COSSettings = obj;
        }

        if (params.Placement) {
            let obj = new Placement();
            obj.deserialize(params.Placement)
            this.Placement = obj;
        }
        this.SgId = 'SgId' in params ? params.SgId : null;

        if (params.PreExecutedFileSettings) {
            this.PreExecutedFileSettings = new Array();
            for (let z in params.PreExecutedFileSettings) {
                let obj = new PreExecuteFileSettings();
                obj.deserialize(params.PreExecutedFileSettings[z]);
                this.PreExecutedFileSettings.push(obj);
            }
        }
        this.AutoRenew = 'AutoRenew' in params ? params.AutoRenew : null;
        this.ClientToken = 'ClientToken' in params ? params.ClientToken : null;
        this.NeedMasterWan = 'NeedMasterWan' in params ? params.NeedMasterWan : null;
        this.RemoteLoginAtCreate = 'RemoteLoginAtCreate' in params ? params.RemoteLoginAtCreate : null;
        this.CheckSecurity = 'CheckSecurity' in params ? params.CheckSecurity : null;
        this.ExtendFsField = 'ExtendFsField' in params ? params.ExtendFsField : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.DisasterRecoverGroupIds = 'DisasterRecoverGroupIds' in params ? params.DisasterRecoverGroupIds : null;
        this.CbsEncrypt = 'CbsEncrypt' in params ? params.CbsEncrypt : null;
        this.MetaType = 'MetaType' in params ? params.MetaType : null;
        this.UnifyMetaInstanceId = 'UnifyMetaInstanceId' in params ? params.UnifyMetaInstanceId : null;

        if (params.MetaDBInfo) {
            let obj = new CustomMetaInfo();
            obj.deserialize(params.MetaDBInfo)
            this.MetaDBInfo = obj;
        }
        this.ApplicationRole = 'ApplicationRole' in params ? params.ApplicationRole : null;
        this.SceneName = 'SceneName' in params ? params.SceneName : null;

        if (params.ExternalService) {
            this.ExternalService = new Array();
            for (let z in params.ExternalService) {
                let obj = new ExternalService();
                obj.deserialize(params.ExternalService[z]);
                this.ExternalService.push(obj);
            }
        }
        this.VersionID = 'VersionID' in params ? params.VersionID : null;
        this.MultiZone = 'MultiZone' in params ? params.MultiZone : null;

        if (params.MultiZoneSettings) {
            this.MultiZoneSettings = new Array();
            for (let z in params.MultiZoneSettings) {
                let obj = new MultiZoneSetting();
                obj.deserialize(params.MultiZoneSettings[z]);
                this.MultiZoneSettings.push(obj);
            }
        }
        this.CosBucket = 'CosBucket' in params ? params.CosBucket : null;

        if (params.NodeMarks) {
            this.NodeMarks = new Array();
            for (let z in params.NodeMarks) {
                let obj = new NodeMark();
                obj.deserialize(params.NodeMarks[z]);
                this.NodeMarks.push(obj);
            }
        }
        this.LoadBalancerId = 'LoadBalancerId' in params ? params.LoadBalancerId : null;

    }
}

/**
 * ScaleOutCluster request structure.
 * @class
 */
class ScaleOutClusterRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The node billing mode. Valid values:
<li>`POSTPAID_BY_HOUR`: The postpaid mode by hour.</li>
<li>`SPOTPAID`: The spot instance mode (for task nodes only).</li>
         * @type {string || null}
         */
        this.InstanceChargeType = null;

        /**
         * Cluster instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Scale-up node type and quantity.
         * @type {ScaleOutNodeConfig || null}
         */
        this.ScaleOutNodeConfig = null;

        /**
         * Unique random identifier with the time efficiency of 5 minutes, which needs to be specified by the caller to prevent the client from creating resources again, for example, a9a90aa6-****-****-****-fae36063280.
         * @type {string || null}
         */
        this.ClientToken = null;

        /**
         * Setting of parameters related to monthly subscription. Through this parameter, you can specify the duration of purchase for monthly subscription instances, whether to set auto-renewal, and other attributes. This parameter is required when the specified instance is subject to the payment mode of prepaid.
         * @type {InstanceChargePrepaid || null}
         */
        this.InstanceChargePrepaid = null;

        /**
         * [Bootstrap Actions](https://www.tencentcloud.comom/document/product/589/35656?from_cn_redirect=1) script settings.
         * @type {Array.<ScriptBootstrapActionConfig> || null}
         */
        this.ScriptBootstrapActionConfig = null;

        /**
         * Scale-out deployment service. New nodes inherit services deployed in the current node type by default, including default optional services. This parameter only supports optional service filling, for example: HDFS, YARN, and Impala have been deployed to existing task nodes. When API is used to scale out the task nodes without deploying Impala, only HDFS and YARN are filled for deployment services. For more details, see [Mapping Table of Component Names](https://www.tencentcloud.comom/document/product/589/98760?from_cn_redirect=1).
         * @type {Array.<number> || null}
         */
        this.SoftDeployInfo = null;

        /**
         * Deployment process. By default, all scale-out service processes are deployed. Deployment processes can be modified. For example, HDFS, YARN, or Impala has been deployed for the current Task node. The default deployment services include DataNode,NodeManager,ImpalaServer. If users need to modify deployment process information, the deployment process can be DataNode, NodeManager, ImpalaServerCoordinator or DataNode, NodeManager, ImpalaServerExecutor. For more details, see [Mapping Table of Process Names](https://www.tencentcloud.comom/document/product/589/98760?from_cn_redirect=1).
         * @type {Array.<number> || null}
         */
        this.ServiceNodeInfo = null;

        /**
         * Spread placement group ID list. Only one can be specified currently.
This parameter can be obtained by calling the DisasterRecoverGroupId field in the return value of the [DescribeDisasterRecoverGroups](https://www.tencentcloud.comom/document/product/213/17810?from_cn_redirect=1) API.
         * @type {Array.<string> || null}
         */
        this.DisasterRecoverGroupIds = null;

        /**
         * List of tags bound to scale-out nodes.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Resource type selected for scale-out with valid values "HOST","POD","MNode", where HOST indicates an ordinary CVM resource, POD indicates a resource provided by the TKE cluster or EKS cluster, and MNode indicates a fully managed resource type.
         * @type {string || null}
         */
        this.HardwareSourceType = null;

        /**
         * Pod-related resource information.
         * @type {PodSpecInfo || null}
         */
        this.PodSpecInfo = null;

        /**
         * Machine group name selected for ClickHouse cluster scale-out.
         * @type {string || null}
         */
        this.ClickHouseClusterName = null;

        /**
         * Machine group type selected for ClickHouse cluster scale-out. "New" indicates creating a group type, and "old" indicates using an existing group type.
         * @type {string || null}
         */
        this.ClickHouseClusterType = null;

        /**
         * Specified Yarn Node Label for scale-out.
         * @type {string || null}
         */
        this.YarnNodeLabel = null;

        /**
         * Whether to start a service after scale-out (default: false).
<li>true: yes</li>.
<li>false: no</li>.
         * @type {boolean || null}
         */
        this.EnableStartServiceFlag = null;

        /**
         * Specifications settings.
         * @type {NodeResourceSpec || null}
         */
        this.ResourceSpec = null;

        /**
         * Availability zone of the instance, such as ap-guangzhou-1. This parameter can also be obtained from the Zone field in the return value of [DescribeZones](https://www.tencentcloud.comom/document/product/213/15707?from_cn_redirect=1).
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Subnet, which is the subnet at the time of cluster creation by default.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Configuration group specified for scale-out.
         * @type {Array.<ScaleOutServiceConfGroupsInfo> || null}
         */
        this.ScaleOutServiceConfGroupsInfo = null;

        /**
         * Node tag information: currently used only in Terraform.
         * @type {NodeMark || null}
         */
        this.NodeMarks = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceChargeType = 'InstanceChargeType' in params ? params.InstanceChargeType : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.ScaleOutNodeConfig) {
            let obj = new ScaleOutNodeConfig();
            obj.deserialize(params.ScaleOutNodeConfig)
            this.ScaleOutNodeConfig = obj;
        }
        this.ClientToken = 'ClientToken' in params ? params.ClientToken : null;

        if (params.InstanceChargePrepaid) {
            let obj = new InstanceChargePrepaid();
            obj.deserialize(params.InstanceChargePrepaid)
            this.InstanceChargePrepaid = obj;
        }

        if (params.ScriptBootstrapActionConfig) {
            this.ScriptBootstrapActionConfig = new Array();
            for (let z in params.ScriptBootstrapActionConfig) {
                let obj = new ScriptBootstrapActionConfig();
                obj.deserialize(params.ScriptBootstrapActionConfig[z]);
                this.ScriptBootstrapActionConfig.push(obj);
            }
        }
        this.SoftDeployInfo = 'SoftDeployInfo' in params ? params.SoftDeployInfo : null;
        this.ServiceNodeInfo = 'ServiceNodeInfo' in params ? params.ServiceNodeInfo : null;
        this.DisasterRecoverGroupIds = 'DisasterRecoverGroupIds' in params ? params.DisasterRecoverGroupIds : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.HardwareSourceType = 'HardwareSourceType' in params ? params.HardwareSourceType : null;

        if (params.PodSpecInfo) {
            let obj = new PodSpecInfo();
            obj.deserialize(params.PodSpecInfo)
            this.PodSpecInfo = obj;
        }
        this.ClickHouseClusterName = 'ClickHouseClusterName' in params ? params.ClickHouseClusterName : null;
        this.ClickHouseClusterType = 'ClickHouseClusterType' in params ? params.ClickHouseClusterType : null;
        this.YarnNodeLabel = 'YarnNodeLabel' in params ? params.YarnNodeLabel : null;
        this.EnableStartServiceFlag = 'EnableStartServiceFlag' in params ? params.EnableStartServiceFlag : null;

        if (params.ResourceSpec) {
            let obj = new NodeResourceSpec();
            obj.deserialize(params.ResourceSpec)
            this.ResourceSpec = obj;
        }
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;

        if (params.ScaleOutServiceConfGroupsInfo) {
            this.ScaleOutServiceConfGroupsInfo = new Array();
            for (let z in params.ScaleOutServiceConfGroupsInfo) {
                let obj = new ScaleOutServiceConfGroupsInfo();
                obj.deserialize(params.ScaleOutServiceConfGroupsInfo[z]);
                this.ScaleOutServiceConfGroupsInfo.push(obj);
            }
        }

        if (params.NodeMarks) {
            let obj = new NodeMark();
            obj.deserialize(params.NodeMarks)
            this.NodeMarks = obj;
        }

    }
}

/**
 * Dynamically generated change detail entries.
 * @class
 */
class DiffDetailItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Attribute.
         * @type {string || null}
         */
        this.Attribute = null;

        /**
         * Currently effective.
         * @type {string || null}
         */
        this.InEffect = null;

        /**
         * To be effective.
         * @type {string || null}
         */
        this.PendingEffectiveness = null;

        /**
         * Operation.
         * @type {string || null}
         */
        this.Operation = null;

        /**
         * Queue.
         * @type {string || null}
         */
        this.Queue = null;

        /**
         * Configuration set.
         * @type {string || null}
         */
        this.ConfigSet = null;

        /**
         * Tag.
         * @type {string || null}
         */
        this.LabelName = null;

        /**
         * Current position.
         * @type {string || null}
         */
        this.InEffectIndex = null;

        /**
         * Position to be effective.
         * @type {string || null}
         */
        this.PendingEffectIndex = null;

        /**
         * Plan mode name.
         * @type {string || null}
         */
        this.PlanName = null;

        /**
         * Tag.
         * @type {string || null}
         */
        this.Label = null;

        /**
         * Placement rule.
         * @type {string || null}
         */
        this.RuleName = null;

        /**
         * Username.
         * @type {string || null}
         */
        this.UserName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Attribute = 'Attribute' in params ? params.Attribute : null;
        this.InEffect = 'InEffect' in params ? params.InEffect : null;
        this.PendingEffectiveness = 'PendingEffectiveness' in params ? params.PendingEffectiveness : null;
        this.Operation = 'Operation' in params ? params.Operation : null;
        this.Queue = 'Queue' in params ? params.Queue : null;
        this.ConfigSet = 'ConfigSet' in params ? params.ConfigSet : null;
        this.LabelName = 'LabelName' in params ? params.LabelName : null;
        this.InEffectIndex = 'InEffectIndex' in params ? params.InEffectIndex : null;
        this.PendingEffectIndex = 'PendingEffectIndex' in params ? params.PendingEffectIndex : null;
        this.PlanName = 'PlanName' in params ? params.PlanName : null;
        this.Label = 'Label' in params ? params.Label : null;
        this.RuleName = 'RuleName' in params ? params.RuleName : null;
        this.UserName = 'UserName' in params ? params.UserName : null;

    }
}

/**
 * Advanced settings of the auto-scaling group.
 * @class
 */
class AutoScaleGroupAdvanceAttrs extends  AbstractModel {
    constructor(){
        super();

        /**
         * Advanced settings of computing resources.
         * @type {ComputeResourceAdvanceParams || null}
         */
        this.ComputeResourceAdvanceParams = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ComputeResourceAdvanceParams) {
            let obj = new ComputeResourceAdvanceParams();
            obj.deserialize(params.ComputeResourceAdvanceParams)
            this.ComputeResourceAdvanceParams = obj;
        }

    }
}

/**
 * DescribeSLInstanceList response structure.
 * @class
 */
class DescribeSLInstanceListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of qualified instances	.
         * @type {number || null}
         */
        this.TotalCnt = null;

        /**
         * Instance information list. If pagination is applied, only the current page's instance information list is displayed.
         * @type {Array.<SLInstanceInfo> || null}
         */
        this.InstancesList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCnt = 'TotalCnt' in params ? params.TotalCnt : null;

        if (params.InstancesList) {
            this.InstancesList = new Array();
            for (let z in params.InstancesList) {
                let obj = new SLInstanceInfo();
                obj.deserialize(params.InstancesList[z]);
                this.InstancesList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Target resource specification
 * @class
 */
class UpdateInstanceSettings extends  AbstractModel {
    constructor(){
        super();

        /**
         * Memory capacity in GB
         * @type {number || null}
         */
        this.Memory = null;

        /**
         * Number of CPU cores
         * @type {number || null}
         */
        this.CPUCores = null;

        /**
         * Machine resource ID (EMR resource identifier)
         * @type {string || null}
         */
        this.ResourceId = null;

        /**
         * Target machine specification
         * @type {string || null}
         */
        this.InstanceType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Memory = 'Memory' in params ? params.Memory : null;
        this.CPUCores = 'CPUCores' in params ? params.CPUCores : null;
        this.ResourceId = 'ResourceId' in params ? params.ResourceId : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;

    }
}

/**
 * DescribeEmrOverviewMetrics response structure.
 * @class
 */
class DescribeEmrOverviewMetricsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Metric data details.
         * @type {Array.<OverviewMetricData> || null}
         */
        this.Result = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Result) {
            this.Result = new Array();
            for (let z in params.Result) {
                let obj = new OverviewMetricData();
                obj.deserialize(params.Result[z]);
                this.Result.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeServiceConfGroupInfos request structure.
 * @class
 */
class DescribeServiceConfGroupInfosRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Component name.
         * @type {string || null}
         */
        this.ServiceName = null;

        /**
         * Configuration group name.
         * @type {string || null}
         */
        this.ConfGroupName = null;

        /**
         * Page number, starting from 1.
         * @type {number || null}
         */
        this.PageNo = null;

        /**
         * Page size.
         * @type {number || null}
         */
        this.PageSize = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;
        this.ConfGroupName = 'ConfGroupName' in params ? params.ConfGroupName : null;
        this.PageNo = 'PageNo' in params ? params.PageNo : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;

    }
}

/**
 * Inter-cluster binding and usage information.
 * @class
 */
class ClusterRelationMeta extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster type.
         * @type {string || null}
         */
        this.ClusterType = null;

        /**
         * Cluster ID list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.ClusterIdList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ClusterType = 'ClusterType' in params ? params.ClusterType : null;
        this.ClusterIdList = 'ClusterIdList' in params ? params.ClusterIdList : null;

    }
}

/**
 * Global configurations of the capacity scheduler under Resource Scheduling.
 * @class
 */
class CapacityGlobalConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether label-based scheduling is enabled.
         * @type {boolean || null}
         */
        this.EnableLabel = null;

        /**
         * Path for tag information storage if label-based scheduling is enabled.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LabelDir = null;

        /**
         * Whether to overwrite the user-specified queue, wherein true indicates overwrite.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.QueueMappingOverride = null;

        /**
         * Advanced settings.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DefaultSetting> || null}
         */
        this.DefaultSettings = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.EnableLabel = 'EnableLabel' in params ? params.EnableLabel : null;
        this.LabelDir = 'LabelDir' in params ? params.LabelDir : null;
        this.QueueMappingOverride = 'QueueMappingOverride' in params ? params.QueueMappingOverride : null;

        if (params.DefaultSettings) {
            this.DefaultSettings = new Array();
            for (let z in params.DefaultSettings) {
                let obj = new DefaultSetting();
                obj.deserialize(params.DefaultSettings[z]);
                this.DefaultSettings.push(obj);
            }
        }

    }
}

/**
 * DescribeInstances request structure.
 * @class
 */
class DescribeInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster filtering policy. Valid values:
<li>clusterList: queries the list of clusters except terminated ones.</li>
<li>monitorManage: queries the list of clusters except those that have been terminated, are being created, or failed to be created.</li>
<li>cloudHardwareManage/componentManage: reserved fields with the same meaning as `monitorManage`.</li>
         * @type {string || null}
         */
        this.DisplayStrategy = null;

        /**
         * Queries by one or more instance IDs in the format of `emr-xxxxxxxx`. For the format of this parameter, please see the `id.N` section in [API Overview](https://intl.cloud.tencent.com/document/api/213/15688). If no instance ID is entered, the list of all instances under this `APPID` will be returned.
         * @type {Array.<string> || null}
         */
        this.InstanceIds = null;

        /**
         * Page number. Default value: 0, indicating the first page.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned results per page. Default value: 10. Maximum value: 100
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * ID of the project to which the instance belongs. This parameter can be obtained from the `projectId` field in the return value of the `DescribeProject` API. If this value is -1, the list of all instances will be returned.
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * Sorting field. Valid values:
<li>clusterId: sorts by cluster ID.</li>
<li>addTime: sorts by instance creation time.</li>
<li>status: sorts by instance status code.</li>
         * @type {string || null}
         */
        this.OrderField = null;

        /**
         * Sorts according to `OrderField` in ascending or descending order. Valid values:
<li>0: descending order.</li>
<li>1: ascending order.</li>Default value: 0.
         * @type {number || null}
         */
        this.Asc = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DisplayStrategy = 'DisplayStrategy' in params ? params.DisplayStrategy : null;
        this.InstanceIds = 'InstanceIds' in params ? params.InstanceIds : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.OrderField = 'OrderField' in params ? params.OrderField : null;
        this.Asc = 'Asc' in params ? params.Asc : null;

    }
}

/**
 * Context of the rule for executing elastic scaling once
 * @class
 */
class NotRepeatStrategy extends  AbstractModel {
    constructor(){
        super();

        /**
         * The specific complete time when the task was executed, in the format of "2020-07-13 00:00:00".
         * @type {string || null}
         */
        this.ExecuteAt = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ExecuteAt = 'ExecuteAt' in params ? params.ExecuteAt : null;

    }
}

/**
 * TerminateSLInstance response structure.
 * @class
 */
class TerminateSLInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Resource descriptions for container resource scale-out
 * @class
 */
class PodNewSpec extends  AbstractModel {
    constructor(){
        super();

        /**
         * The identifier of an external resource provider, such as "cls-a1cd23fa".
         * @type {string || null}
         */
        this.ResourceProviderIdentifier = null;

        /**
         * The type of the external resource provider, such as "tke". Currently, only "tke" is supported.
         * @type {string || null}
         */
        this.ResourceProviderType = null;

        /**
         * The purpose of the resource, which means the node type and can only be "TASK".
         * @type {string || null}
         */
        this.NodeFlag = null;

        /**
         * The number of CPUs.
         * @type {number || null}
         */
        this.Cpu = null;

        /**
         * The memory size in GB.
         * @type {number || null}
         */
        this.Memory = null;

        /**
         * The EKS cluster - CPU type. Valid values: `intel` and `amd`.
         * @type {string || null}
         */
        this.CpuType = null;

        /**
         * The data directory mounting information of the pod node.
         * @type {Array.<PodVolume> || null}
         */
        this.PodVolumes = null;

        /**
         * Whether the dynamic spec is used. Valid values:
<li>`true`: Yes</li>
<li>`false` (default): No</li>
         * @type {boolean || null}
         */
        this.EnableDynamicSpecFlag = null;

        /**
         * The dynamic spec.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {DynamicPodSpec || null}
         */
        this.DynamicPodSpec = null;

        /**
         * Unique ID of VPC network.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Unique ID of a VPC subnet.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * pod name
         * @type {string || null}
         */
        this.PodName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceProviderIdentifier = 'ResourceProviderIdentifier' in params ? params.ResourceProviderIdentifier : null;
        this.ResourceProviderType = 'ResourceProviderType' in params ? params.ResourceProviderType : null;
        this.NodeFlag = 'NodeFlag' in params ? params.NodeFlag : null;
        this.Cpu = 'Cpu' in params ? params.Cpu : null;
        this.Memory = 'Memory' in params ? params.Memory : null;
        this.CpuType = 'CpuType' in params ? params.CpuType : null;

        if (params.PodVolumes) {
            this.PodVolumes = new Array();
            for (let z in params.PodVolumes) {
                let obj = new PodVolume();
                obj.deserialize(params.PodVolumes[z]);
                this.PodVolumes.push(obj);
            }
        }
        this.EnableDynamicSpecFlag = 'EnableDynamicSpecFlag' in params ? params.EnableDynamicSpecFlag : null;

        if (params.DynamicPodSpec) {
            let obj = new DynamicPodSpec();
            obj.deserialize(params.DynamicPodSpec)
            this.DynamicPodSpec = obj;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.PodName = 'PodName' in params ? params.PodName : null;

    }
}

/**
 * InquiryPriceUpdateInstance request structure.
 * @class
 */
class InquiryPriceUpdateInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Time unit of scaling. Valid values:
<li>s: seconds. When `PayMode` is 0, `TimeUnit` can only be `s`.</li>
         * @type {string || null}
         */
        this.TimeUnit = null;

        /**
         * Duration of scaling, which needs to be used together with `TimeUnit`.
<li>When `PayMode` is 0, `TimeSpan` can only be 3,600.</li>
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         * Instance billing mode. Valid values:
<li>0: pay-as-you-go.</li>
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Currency.
         * @type {string || null}
         */
        this.Currency = null;

        /**
         * Target node specification.
         * @type {UpdateInstanceSettings || null}
         */
        this.UpdateSpec = null;

        /**
         * Instance location. This parameter is used to specify the AZ, project, and other attributes of the instance.
         * @type {Placement || null}
         */
        this.Placement = null;

        /**
         * The resource ID list for batch configuration change.
         * @type {Array.<string> || null}
         */
        this.ResourceIdList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TimeUnit = 'TimeUnit' in params ? params.TimeUnit : null;
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.Currency = 'Currency' in params ? params.Currency : null;

        if (params.UpdateSpec) {
            let obj = new UpdateInstanceSettings();
            obj.deserialize(params.UpdateSpec)
            this.UpdateSpec = obj;
        }

        if (params.Placement) {
            let obj = new Placement();
            obj.deserialize(params.Placement)
            this.Placement = obj;
        }
        this.ResourceIdList = 'ResourceIdList' in params ? params.ResourceIdList : null;

    }
}

/**
 * DescribeAutoScaleStrategies request structure.
 * @class
 */
class DescribeAutoScaleStrategiesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Scaling group ID.
         * @type {number || null}
         */
        this.GroupId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.GroupId = 'GroupId' in params ? params.GroupId : null;

    }
}

/**
 * DeployYarnConf request structure.
 * @class
 */
class DeployYarnConfRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * English ID of the EMR cluster.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * DescribeGroupsSTD response structure.
 * @class
 */
class DescribeGroupsSTDResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * User group information.
         * @type {Array.<GroupInfos> || null}
         */
        this.Data = null;

        /**
         * Number of eligible user groups.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new GroupInfos();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeNodeDataDisks response structure.
 * @class
 */
class DescribeNodeDataDisksResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Cloud disk list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<CBSInstance> || null}
         */
        this.CBSList = null;

        /**
         * Maximum cloud disk capacity.
         * @type {number || null}
         */
        this.MaxSize = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.CBSList) {
            this.CBSList = new Array();
            for (let z in params.CBSList) {
                let obj = new CBSInstance();
                obj.deserialize(params.CBSList[z]);
                this.CBSList.push(obj);
            }
        }
        this.MaxSize = 'MaxSize' in params ? params.MaxSize : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeInstancesList request structure.
 * @class
 */
class DescribeInstancesListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster filtering policy. Valid values: <li>clusterList: Queries the list of clusters excluding terminated ones.</li><li>monitorManage: Queries the list of clusters excluding those terminated, under creation and not successfully created.</li><li>cloudHardwareManage/componentManage: Two reserved values, which have the same implications as those of `monitorManage`.</li>
         * @type {string || null}
         */
        this.DisplayStrategy = null;

        /**
         * Page number. Default value: `0`, indicating the first page.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of records to be returned per page. The default value is 100, and the maximum value is 100.
If both limit and offset are 0, all records will be queried.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Sorting field. Valid values: <li>clusterId: Sorting by instance ID. </li><li>addTime: Sorting by instance creation time.</li><li>status: Sorting by instance status code.</li>
         * @type {string || null}
         */
        this.OrderField = null;

        /**
         * Sort by OrderField in ascending or descending order. Valid values: <li>0: ascending order;</li> <li>1: descending order.</li> The default value is 0.
         * @type {number || null}
         */
        this.Asc = null;

        /**
         * Custom search filter. Examples: <li>instance of filtering by ClusterId: [{"Name":"ClusterId","Values":["emr-xxxxxxxx"]}]</li><li>instance of filtering by clusterName: [{"Name": "ClusterName","Values": ["cluster_name"]}]</li><li>instance of filtering by ClusterStatus: [{"Name": "ClusterStatus","Values": ["2"]}]</li>.
         * @type {Array.<Filters> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DisplayStrategy = 'DisplayStrategy' in params ? params.DisplayStrategy : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.OrderField = 'OrderField' in params ? params.OrderField : null;
        this.Asc = 'Asc' in params ? params.Asc : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filters();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * List of key-value pairs
 * @class
 */
class ItemSeq extends  AbstractModel {
    constructor(){
        super();

        /**
         * Tag name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Item> || null}
         */
        this.Items = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Items) {
            this.Items = new Array();
            for (let z in params.Items) {
                let obj = new Item();
                obj.deserialize(params.Items[z]);
                this.Items.push(obj);
            }
        }

    }
}

/**
 * Scheduled scaling task policy
 * @class
 */
class RepeatStrategy extends  AbstractModel {
    constructor(){
        super();

        /**
         * The valid values DAY, DOW, DOM, and NONE respectively indicate repetition by day, repetition by week, repetition by month, and one-time execution. This parameter is required.
         * @type {string || null}
         */
        this.RepeatType = null;

        /**
         * Daily repetition rule, which is effective when RepeatType is set to DAY

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {DayRepeatStrategy || null}
         */
        this.DayRepeat = null;

        /**
         * Weekly repetition rule, effective when RepeatType is DOW

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {WeekRepeatStrategy || null}
         */
        this.WeekRepeat = null;

        /**
         * Monthly repetition rule, valid when RepeatType is DOM

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {MonthRepeatStrategy || null}
         */
        this.MonthRepeat = null;

        /**
         * One-time execution rule, valid when RepeatType is NONE

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {NotRepeatStrategy || null}
         */
        this.NotRepeat = null;

        /**
         * Rule expiration time. After this time is due, the rule will be automatically set to the status "suspended". The format is "2020-07-23 00:00:00". It is required.
         * @type {string || null}
         */
        this.Expire = null;

        /**
         * Periodic rule start time.
         * @type {string || null}
         */
        this.StartTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RepeatType = 'RepeatType' in params ? params.RepeatType : null;

        if (params.DayRepeat) {
            let obj = new DayRepeatStrategy();
            obj.deserialize(params.DayRepeat)
            this.DayRepeat = obj;
        }

        if (params.WeekRepeat) {
            let obj = new WeekRepeatStrategy();
            obj.deserialize(params.WeekRepeat)
            this.WeekRepeat = obj;
        }

        if (params.MonthRepeat) {
            let obj = new MonthRepeatStrategy();
            obj.deserialize(params.MonthRepeat)
            this.MonthRepeat = obj;
        }

        if (params.NotRepeat) {
            let obj = new NotRepeatStrategy();
            obj.deserialize(params.NotRepeat)
            this.NotRepeat = obj;
        }
        this.Expire = 'Expire' in params ? params.Expire : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;

    }
}

/**
 * AttachDisks response structure.
 * @class
 */
class AttachDisksResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Flow ID.
         * @type {number || null}
         */
        this.FlowId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Resource details
 * @class
 */
class OutterResource extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specification
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Spec = null;

        /**
         * Specification name
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SpecName = null;

        /**
         * Disk type
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.StorageType = null;

        /**
         * Disk type
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * System disk size
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RootSize = null;

        /**
         * Memory size
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MemSize = null;

        /**
         * Number of CPUs
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Cpu = null;

        /**
         * Disk size
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * Specification
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Spec = 'Spec' in params ? params.Spec : null;
        this.SpecName = 'SpecName' in params ? params.SpecName : null;
        this.StorageType = 'StorageType' in params ? params.StorageType : null;
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.RootSize = 'RootSize' in params ? params.RootSize : null;
        this.MemSize = 'MemSize' in params ? params.MemSize : null;
        this.Cpu = 'Cpu' in params ? params.Cpu : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;

    }
}

/**
 * Operation scope
 * @class
 */
class OpScope extends  AbstractModel {
    constructor(){
        super();

        /**
         * The information of the services to operate on.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ServiceBasicRestartInfo> || null}
         */
        this.ServiceInfoList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ServiceInfoList) {
            this.ServiceInfoList = new Array();
            for (let z in params.ServiceInfoList) {
                let obj = new ServiceBasicRestartInfo();
                obj.deserialize(params.ServiceInfoList[z]);
                this.ServiceInfoList.push(obj);
            }
        }

    }
}

/**
 * ResizeDataDisks request structure.
 * @class
 */
class ResizeDataDisksRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of the EMR cluster instance.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Scale-out value, which should be greater than the original capacity and a multiple of 10.
         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * ID list of nodes to be scaled out.
         * @type {Array.<string> || null}
         */
        this.CvmInstanceIds = null;

        /**
         * ID of the cloud disk to be scaled out.
         * @type {Array.<string> || null}
         */
        this.DiskIds = null;

        /**
         * Whether to scale out all cloud disks.
         * @type {boolean || null}
         */
        this.ResizeAll = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.CvmInstanceIds = 'CvmInstanceIds' in params ? params.CvmInstanceIds : null;
        this.DiskIds = 'DiskIds' in params ? params.DiskIds : null;
        this.ResizeAll = 'ResizeAll' in params ? params.ResizeAll : null;

    }
}

/**
 * DeleteAutoScaleStrategy request structure.
 * @class
 */
class DeleteAutoScaleStrategyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Automatic scaling rule type. 1: Scaling by load metrics; 2: Scaling by time rules.
         * @type {number || null}
         */
        this.StrategyType = null;

        /**
         * Rule ID.
         * @type {number || null}
         */
        this.StrategyId = null;

        /**
         * Scaling group ID.
         * @type {number || null}
         */
        this.GroupId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StrategyType = 'StrategyType' in params ? params.StrategyType : null;
        this.StrategyId = 'StrategyId' in params ? params.StrategyId : null;
        this.GroupId = 'GroupId' in params ? params.GroupId : null;

    }
}

/**
 * Node disk type.
 * @class
 */
class NodeSpecDiskV2 extends  AbstractModel {
    constructor(){
        super();

        /**
         * Quantity.
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Disk type.
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Specified disk size.
         * @type {number || null}
         */
        this.DefaultDiskSize = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Count = 'Count' in params ? params.Count : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.DefaultDiskSize = 'DefaultDiskSize' in params ? params.DefaultDiskSize : null;

    }
}

/**
 * DeployYarnConf response structure.
 * @class
 */
class DeployYarnConfResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Process ID after the process is started. You can use the [DescribeClusterFlowStatusDetail](https://intl.cloud.tencent.com/document/product/589/107224?from_cn_redirect=1) API to obtain the process status.
         * @type {number || null}
         */
        this.FlowId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeInstancesList response structure.
 * @class
 */
class DescribeInstancesListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of eligible instances.
         * @type {number || null}
         */
        this.TotalCnt = null;

        /**
         * Cluster instance list.
         * @type {Array.<EmrListInstance> || null}
         */
        this.InstancesList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCnt = 'TotalCnt' in params ? params.TotalCnt : null;

        if (params.InstancesList) {
            this.InstancesList = new Array();
            for (let z in params.InstancesList) {
                let obj = new EmrListInstance();
                obj.deserialize(params.InstancesList[z]);
                this.InstancesList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * SetNodeResourceConfigDefault request structure.
 * @class
 */
class SetNodeResourceConfigDefaultRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Configuration ID.
         * @type {number || null}
         */
        this.ResourceConfigId = null;

        /**
         * Specification node type, with the valid values of CORE, TASK, and ROUTER.
         * @type {string || null}
         */
        this.ResourceType = null;

        /**
         * The type can be ComputeResource, EMR, or a default value. The default value is EMR.
         * @type {string || null}
         */
        this.ResourceBaseType = null;

        /**
         * Computing resource ID.
         * @type {string || null}
         */
        this.ComputeResourceId = null;

        /**
         * Hardware type.
         * @type {string || null}
         */
        this.HardwareResourceType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ResourceConfigId = 'ResourceConfigId' in params ? params.ResourceConfigId : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.ResourceBaseType = 'ResourceBaseType' in params ? params.ResourceBaseType : null;
        this.ComputeResourceId = 'ComputeResourceId' in params ? params.ComputeResourceId : null;
        this.HardwareResourceType = 'HardwareResourceType' in params ? params.HardwareResourceType : null;

    }
}

/**
 * Serverless HBase monthly subscription duration
 * @class
 */
class Period extends  AbstractModel {
    constructor(){
        super();

        /**
         * Time span.
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         * Time unit, "m" stands for month.
         * @type {string || null}
         */
        this.TimeUnit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;
        this.TimeUnit = 'TimeUnit' in params ? params.TimeUnit : null;

    }
}

/**
 * Description of daily repeated tasks for elastic scaling
 * @class
 */
class DayRepeatStrategy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specific time for repetition task execution, such as 01:02:00.
         * @type {string || null}
         */
        this.ExecuteAtTimeOfDay = null;

        /**
         * Executing every Step days.
         * @type {number || null}
         */
        this.Step = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ExecuteAtTimeOfDay = 'ExecuteAtTimeOfDay' in params ? params.ExecuteAtTimeOfDay : null;
        this.Step = 'Step' in params ? params.Step : null;

    }
}

/**
 * ModifyInstanceBasic request structure.
 * @class
 */
class ModifyInstanceBasicRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Cluster name.
         * @type {string || null}
         */
        this.ClusterName = null;

        /**
         * Used to label computing resources that need to be modified.
         * @type {string || null}
         */
        this.ResourceBaseType = null;

        /**
         * Computing resource ID that needs to be modified, and can be used together with ResourceBaseType.
         * @type {string || null}
         */
        this.ComputeResourceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ClusterName = 'ClusterName' in params ? params.ClusterName : null;
        this.ResourceBaseType = 'ResourceBaseType' in params ? params.ResourceBaseType : null;
        this.ComputeResourceId = 'ComputeResourceId' in params ? params.ComputeResourceId : null;

    }
}

/**
 * DescribeUsersForUserManager response structure.
 * @class
 */
class DescribeUsersForUserManagerResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number
         * @type {number || null}
         */
        this.TotalCnt = null;

        /**
         * User information list
Note: This field may return null, indicating that no valid value can be obtained.
         * @type {Array.<UserManagerUserBriefInfo> || null}
         */
        this.UserManagerUserList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCnt = 'TotalCnt' in params ? params.TotalCnt : null;

        if (params.UserManagerUserList) {
            this.UserManagerUserList = new Array();
            for (let z in params.UserManagerUserList) {
                let obj = new UserManagerUserBriefInfo();
                obj.deserialize(params.UserManagerUserList[z]);
                this.UserManagerUserList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeResourceScheduleDiffDetail request structure.
 * @class
 */
class DescribeResourceScheduleDiffDetailRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * English ID of the EMR cluster.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Scheduler for the queried change details. The available values are fair and capacity. If this parameter is not passed or a null value is passed, the latest scheduler will be used.
         * @type {string || null}
         */
        this.Scheduler = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Scheduler = 'Scheduler' in params ? params.Scheduler : null;

    }
}

/**
 * ResetYarnConfig response structure.
 * @class
 */
class ResetYarnConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Additional process information.
 * @class
 */
class FlowExtraDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Additional information title.
         * @type {string || null}
         */
        this.Title = null;

        /**
         * Additional information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<FlowParamsDesc> || null}
         */
        this.Detail = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Title = 'Title' in params ? params.Title : null;

        if (params.Detail) {
            this.Detail = new Array();
            for (let z in params.Detail) {
                let obj = new FlowParamsDesc();
                obj.deserialize(params.Detail[z]);
                this.Detail.push(obj);
            }
        }

    }
}

/**
 * InquiryPriceRenewInstance request structure.
 * @class
 */
class InquiryPriceRenewInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * How long the instance will be renewed for, which needs to be used together with `TimeUnit`.
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         * Instance billing mode.
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * List of resource IDs of the node to be renewed. The resource ID is in the format of `emr-vm-xxxxxxxx`. A valid resource ID can be queried in the [console](https://console.cloud.tencent.com/emr/static/hardware).
         * @type {Array.<string> || null}
         */
        this.ResourceIds = null;

        /**
         * Unit of time for instance renewal.
         * @type {string || null}
         */
        this.TimeUnit = null;

        /**
         * Currency.
         * @type {string || null}
         */
        this.Currency = null;

        /**
         * Location of the instance. This parameter is used to specify the AZ, project, and other attributes of the instance.
         * @type {Placement || null}
         */
        this.Placement = null;

        /**
         * Whether to change from pay-as-you-go billing to monthly subscription billing. `0`: no; `1`: yes
         * @type {number || null}
         */
        this.ModifyPayMode = null;

        /**
         * Whether the renewal price for every node is required.
         * @type {boolean || null}
         */
        this.NeedDetail = null;

        /**
         * Cluster ID. This parameter can be filled to get renewal information for all yearly/monthly subscription nodes in the cluster.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.ResourceIds = 'ResourceIds' in params ? params.ResourceIds : null;
        this.TimeUnit = 'TimeUnit' in params ? params.TimeUnit : null;
        this.Currency = 'Currency' in params ? params.Currency : null;

        if (params.Placement) {
            let obj = new Placement();
            obj.deserialize(params.Placement)
            this.Placement = obj;
        }
        this.ModifyPayMode = 'ModifyPayMode' in params ? params.ModifyPayMode : null;
        this.NeedDetail = 'NeedDetail' in params ? params.NeedDetail : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * Output parameters
 * @class
 */
class CdbInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database instance.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Database IP address.
         * @type {string || null}
         */
        this.Ip = null;

        /**
         * Database port.
         * @type {number || null}
         */
        this.Port = null;

        /**
         * Database memory specifications.
         * @type {number || null}
         */
        this.MemSize = null;

        /**
         * Database disk specifications.
         * @type {number || null}
         */
        this.Volume = null;

        /**
         * Service identifier.
         * @type {string || null}
         */
        this.Service = null;

        /**
         * Expiration time.
         * @type {string || null}
         */
        this.ExpireTime = null;

        /**
         * Application time.
         * @type {string || null}
         */
        this.ApplyTime = null;

        /**
         * Billing type.
         * @type {number || null}
         */
        this.PayType = null;

        /**
         * Expiration flag.
         * @type {boolean || null}
         */
        this.ExpireFlag = null;

        /**
         * Database status.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Renewal flag.
         * @type {number || null}
         */
        this.IsAutoRenew = null;

        /**
         * Database string.
         * @type {string || null}
         */
        this.SerialNo = null;

        /**
         * ZoneId
         * @type {number || null}
         */
        this.ZoneId = null;

        /**
         * RegionId
         * @type {number || null}
         */
        this.RegionId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.Ip = 'Ip' in params ? params.Ip : null;
        this.Port = 'Port' in params ? params.Port : null;
        this.MemSize = 'MemSize' in params ? params.MemSize : null;
        this.Volume = 'Volume' in params ? params.Volume : null;
        this.Service = 'Service' in params ? params.Service : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.ApplyTime = 'ApplyTime' in params ? params.ApplyTime : null;
        this.PayType = 'PayType' in params ? params.PayType : null;
        this.ExpireFlag = 'ExpireFlag' in params ? params.ExpireFlag : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.IsAutoRenew = 'IsAutoRenew' in params ? params.IsAutoRenew : null;
        this.SerialNo = 'SerialNo' in params ? params.SerialNo : null;
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.RegionId = 'RegionId' in params ? params.RegionId : null;

    }
}

/**
 * ModifyResourcesTags request structure.
 * @class
 */
class ModifyResourcesTagsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Tag type. Valid values: Cluster and Node
         * @type {string || null}
         */
        this.ModifyType = null;

        /**
         * Tag information
         * @type {Array.<ModifyResourceTags> || null}
         */
        this.ModifyResourceTagsInfoList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ModifyType = 'ModifyType' in params ? params.ModifyType : null;

        if (params.ModifyResourceTagsInfoList) {
            this.ModifyResourceTagsInfoList = new Array();
            for (let z in params.ModifyResourceTagsInfoList) {
                let obj = new ModifyResourceTags();
                obj.deserialize(params.ModifyResourceTagsInfoList[z]);
                this.ModifyResourceTagsInfoList.push(obj);
            }
        }

    }
}

/**
 * Multi-cloud disk parameters
 * @class
 */
class MultiDiskMC extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of cloud disks of this type.
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Disk type.
1: Local Disk.
2: Cloud Disk.
3: Local SSD.
4: Cloud SSD.
5: Premium Cloud Disk.
6: Enhanced SSD.
11: Throughput HDD.
12: Tremendous SSD.
13: Balanced SSD.
14: Big Data Cloud Disk.
15: High IO Cloud Disk.
16: Remote SSD.
         * @type {number || null}
         */
        this.Type = null;

        /**
         * Disk size.
         * @type {string || null}
         */
        this.Size = null;

        /**
         * Cloud disk size (bytes).
         * @type {number || null}
         */
        this.Volume = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Count = 'Count' in params ? params.Count : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.Size = 'Size' in params ? params.Size : null;
        this.Volume = 'Volume' in params ? params.Volume : null;

    }
}

/**
 * AddUsersForUserManager request structure.
 * @class
 */
class AddUsersForUserManagerRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster string ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * User information list
         * @type {Array.<UserInfoForUserManager> || null}
         */
        this.UserManagerUserList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.UserManagerUserList) {
            this.UserManagerUserList = new Array();
            for (let z in params.UserManagerUserList) {
                let obj = new UserInfoForUserManager();
                obj.deserialize(params.UserManagerUserList[z]);
                this.UserManagerUserList.push(obj);
            }
        }

    }
}

/**
 * AZ configurations
 * @class
 */
class ZoneResourceConfiguration extends  AbstractModel {
    constructor(){
        super();

        /**
         * The VPC configuration information. This parameter is used to specify the VPC ID, subnet ID and other information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {VirtualPrivateCloud || null}
         */
        this.VirtualPrivateCloud = null;

        /**
         * The instance location. This parameter is used to specify the AZ, project, and other attributes of the instance.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Placement || null}
         */
        this.Placement = null;

        /**
         * The specs of all nodes.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {AllNodeResourceSpec || null}
         */
        this.AllNodeResourceSpec = null;

        /**
         * Leave ZoneTag empty in the case of a single availability zone. In the case of a dual-AZ deployment, select master for the first availability zone's ZoneTag and standby for the second. In the case of a three-AZ deployment, select master for the first availability zone's ZoneTag, standby for the second, and third-party for the third. Valid values.
  <li>master</li>
  <li>standby</li>
  <li>third-party</li>
         * @type {string || null}
         */
        this.ZoneTag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.VirtualPrivateCloud) {
            let obj = new VirtualPrivateCloud();
            obj.deserialize(params.VirtualPrivateCloud)
            this.VirtualPrivateCloud = obj;
        }

        if (params.Placement) {
            let obj = new Placement();
            obj.deserialize(params.Placement)
            this.Placement = obj;
        }

        if (params.AllNodeResourceSpec) {
            let obj = new AllNodeResourceSpec();
            obj.deserialize(params.AllNodeResourceSpec)
            this.AllNodeResourceSpec = obj;
        }
        this.ZoneTag = 'ZoneTag' in params ? params.ZoneTag : null;

    }
}

/**
 * HDFS Cloud File Storage (CFS) details.
 * @class
 */
class StorageSummaryDistribution extends  AbstractModel {
    constructor(){
        super();

        /**
         * Data item.
         * @type {string || null}
         */
        this.MetricItem = null;

        /**
         * Data item description.
         * @type {string || null}
         */
        this.MetricName = null;

        /**
         * Sampling value.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Dps> || null}
         */
        this.Dps = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MetricItem = 'MetricItem' in params ? params.MetricItem : null;
        this.MetricName = 'MetricName' in params ? params.MetricName : null;

        if (params.Dps) {
            this.Dps = new Array();
            for (let z in params.Dps) {
                let obj = new Dps();
                obj.deserialize(params.Dps[z]);
                this.Dps.push(obj);
            }
        }

    }
}

/**
 * DescribeSLInstance request structure.
 * @class
 */
class DescribeSLInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance unique identifier (string).
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * User-created Hive-MetaDB instance information
 * @class
 */
class CustomMetaInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * JDBC connection to custom MetaDB instance beginning with `jdbc:mysql://`
         * @type {string || null}
         */
        this.MetaDataJdbcUrl = null;

        /**
         * Custom MetaDB instance username
         * @type {string || null}
         */
        this.MetaDataUser = null;

        /**
         * Custom MetaDB instance password
         * @type {string || null}
         */
        this.MetaDataPass = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MetaDataJdbcUrl = 'MetaDataJdbcUrl' in params ? params.MetaDataJdbcUrl : null;
        this.MetaDataUser = 'MetaDataUser' in params ? params.MetaDataUser : null;
        this.MetaDataPass = 'MetaDataPass' in params ? params.MetaDataPass : null;

    }
}

/**
 * Yarn application statistics
 * @class
 */
class ApplicationStatics extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queue name
         * @type {string || null}
         */
        this.Queue = null;

        /**
         * Username
         * @type {string || null}
         */
        this.User = null;

        /**
         * Application type
         * @type {string || null}
         */
        this.ApplicationType = null;

        /**
         * `SumMemorySeconds` meaning
         * @type {number || null}
         */
        this.SumMemorySeconds = null;

        /**
         * 
         * @type {number || null}
         */
        this.SumVCoreSeconds = null;

        /**
         * SumHDFSBytesWritten (with unit)
         * @type {string || null}
         */
        this.SumHDFSBytesWritten = null;

        /**
         * SumHDFSBytesRead (with unit)
         * @type {string || null}
         */
        this.SumHDFSBytesRead = null;

        /**
         * Application count
         * @type {number || null}
         */
        this.CountApps = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Queue = 'Queue' in params ? params.Queue : null;
        this.User = 'User' in params ? params.User : null;
        this.ApplicationType = 'ApplicationType' in params ? params.ApplicationType : null;
        this.SumMemorySeconds = 'SumMemorySeconds' in params ? params.SumMemorySeconds : null;
        this.SumVCoreSeconds = 'SumVCoreSeconds' in params ? params.SumVCoreSeconds : null;
        this.SumHDFSBytesWritten = 'SumHDFSBytesWritten' in params ? params.SumHDFSBytesWritten : null;
        this.SumHDFSBytesRead = 'SumHDFSBytesRead' in params ? params.SumHDFSBytesRead : null;
        this.CountApps = 'CountApps' in params ? params.CountApps : null;

    }
}

/**
 * Configuration item (configuration management page).
 * @class
 */
class ConfigurationItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Configuration item name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Configuration item value.
         * @type {string || null}
         */
        this.Value = null;

        /**
         * Name of the configuration file where the configuration item is located.
         * @type {string || null}
         */
        this.InFile = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Value = 'Value' in params ? params.Value : null;
        this.InFile = 'InFile' in params ? params.InFile : null;

    }
}

/**
 * DeleteGroupsSTD request structure.
 * @class
 */
class DeleteGroupsSTDRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster name.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * User group name array.
         * @type {Array.<string> || null}
         */
        this.GroupNames = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.GroupNames = 'GroupNames' in params ? params.GroupNames : null;

    }
}

/**
 * InquiryPriceCreateInstance request structure.
 * @class
 */
class InquiryPriceCreateInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Time unit of instance purchase duration. Valid values:
<li>s: seconds. When `PayMode` is 0, `TimeUnit` can only be `s`.</li>
         * @type {string || null}
         */
        this.TimeUnit = null;

        /**
         * Purchase duration of instance, which needs to be used together with `TimeUnit`.
<li>When `TimeUnit` is `s`, this parameter can only be filled with 3600, indicating a pay-as-you-go instance.</li>
<li>When `TimeUnit` is `m`, the number entered in this parameter indicates the purchase duration of the monthly-subscription instance; for example, 1 means one month</li>
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         * Currency.
         * @type {string || null}
         */
        this.Currency = null;

        /**
         * Instance billing mode. Valid values:
<li>0: pay-as-you-go.</li>
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Whether to enable high availability of node. Valid values:
<li>0: does not enable high availability of node.</li>
<li>1: enables high availability of node.</li>
         * @type {number || null}
         */
        this.SupportHA = null;

        /**
         * List of deployed components. Different required components need to be selected for different EMR product IDs (ProductId: For specific meanings, see the ProductId field in the input parameters): <li>When ProductId is 2 (EMR v2.0.1), the required components include hdfs-2.7.3, yarn-2.7.3, zookeeper-3.4.9, and knox-1.2.0.</li> <li>When ProductId is 16 (EMR v2.3.0), the required components include hdfs-2.8.5, yarn-2.8.5, zookeeper-3.5.5, and knox-1.2.0.</li> <li>When ProductId is 20 (EMR v2.5.0), the required components include hdfs-2.8.5, yarn-2.8.5, zookeeper-3.6.1, and knox-1.2.0.</li> <li>When ProductId is 30 (EMR v2.6.0), the required components include hdfs-2.8.5, yarn-2.8.5, zookeeper-3.6.1, openldap-2.4.44, and knox-1.2.0.</li> <li>When ProductId is 38 (EMR v2.7.0), the required components include hdfs-2.8.5, yarn-2.8.5, zookeeper-3.6.3, openldap-2.4.44, and knox-1.6.1.</li> <li>When ProductId is 57 (EMR v2.8.0), the required components include hdfs-2.8.5, yarn-2.8.5, zookeeper-3.6.3, openldap-2.4.44, and knox-1.6.1.</li> <li>When ProductId is 7 (EMR v3.0.0), the required components include hdfs-3.1.2, yarn-3.1.2, zookeeper-3.4.9, and knox-1.2.0.</li> <li>When ProductId is 25 (EMR v3.1.0), the required components include hdfs-3.1.2, yarn-3.1.2, zookeeper-3.6.1, and knox-1.2.0.</li> <li>When ProductId is 31 (EMR v3.1.1), the required components include hdfs-3.1.2, yarn-3.1.2, zookeeper-3.6.1, and knox-1.2.0.</li> <li>When ProductId is 28 (EMR v3.2.0), the required components include hdfs-3.2.2, yarn-3.2.2, zookeeper-3.6.1, and knox-1.2.0.</li> <li>When ProductId is 33 (EMR v3.2.1), the required components include hdfs-3.2.2, yarn-3.2.2, zookeeper-3.6.1, openldap-2.4.44, and knox-1.2.0.</li> <li>When ProductId is 34 (EMR v3.3.0), the required components include hdfs-3.2.2, yarn-3.2.2, zookeeper-3.6.1, openldap-2.4.44, and knox-1.2.0.</li> <li>When ProductId is 37 (EMR v3.4.0), the required components include hdfs-3.2.2, yarn-3.2.2, zookeeper-3.6.3, openldap-2.4.44, and knox-1.6.1.</li> <li>When ProductId is 44 (EMR v3.5.0), the required components include hdfs-3.2.2, yarn-3.2.2, zookeeper-3.6.3, openldap-2.4.44, and knox-1.6.1.</li> <li>When ProductId is 53 (EMR v3.6.0), the required components include hdfs-3.2.2, yarn-3.2.2, zookeeper-3.6.3, openldap-2.4.44, and knox-1.6.1.</li> <li>When ProductId is 58 (EMR v3.6.1), the required components include hdfs-3.2.2, yarn-3.2.2, zookeeper-3.6.3, openldap-2.4.46, and knox-1.6.1.</li> <li>When ProductId is 47 (EMR v4.0.0), the required components include hdfs-3.2.2, yarn-3.2.2, zookeeper-3.6.3, openldap-2.4.44, and knox-1.6.1.</li>
         * @type {Array.<string> || null}
         */
        this.Software = null;

        /**
         * Node specification queried for price.
         * @type {NewResourceSpec || null}
         */
        this.ResourceSpec = null;

        /**
         * Instance location. This parameter is used to specify the AZ, project, and other attributes of the instance.
         * @type {Placement || null}
         */
        this.Placement = null;

        /**
         * Configuration information of VPC. This parameter is used to specify the VPC ID, subnet ID, etc.
         * @type {VPCSettings || null}
         */
        this.VPCSettings = null;

        /**
         * Hive-shared metadatabase type. Valid values:
<li>EMR_DEFAULT_META: the cluster creates one by default.</li>
<li>EMR_EXIST_META: the cluster uses the specified EMR-MetaDB instance.</li>
<li>USER_CUSTOM_META: the cluster uses a custom MetaDB instance.</li>
         * @type {string || null}
         */
        this.MetaType = null;

        /**
         * EMR-MetaDB instance
         * @type {string || null}
         */
        this.UnifyMetaInstanceId = null;

        /**
         * Custom MetaDB instance information
         * @type {CustomMetaInfo || null}
         */
        this.MetaDBInfo = null;

        /**
         * Product ID. Different product IDs represent different EMR product versions. Valid values: <li>2: EMR v2.0.1;</li> <li>16: EMR v2.3.0;</li> <li>20: EMR v2.5.0;</li> <li>30: EMR v2.6.0;</li> <li>38: EMR v2.7.0;</li> <li>57: EMR v2.8.0;</li> <li>7: EMR v3.0.0;</li> <li>25: EMR v3.1.0;</li> <li>31: EMR v3.1.1;</li> <li>28: EMR v3.2.0</li> <li>33: EMR v3.2.1</li> <li>34: EMR v3.3.0</li> <li>37: EMR v3.4.0;</li> <li>44: EMR v3.5.0;</li> <li>53: EMR v3.6.0;</li> <li>58: EMR v3.6.1;</li> <li>47: EMR v4.0.0.</li>
         * @type {number || null}
         */
        this.ProductId = null;

        /**
         * Scenario values: Hadoop-Kudu, Hadoop-ZooKeeper, Hadoop-Presto, and Hadoop-HBase.
         * @type {string || null}
         */
        this.SceneName = null;

        /**
         * Shared component information
         * @type {Array.<ExternalService> || null}
         */
        this.ExternalService = null;

        /**
         * 
         * @type {number || null}
         */
        this.VersionID = null;

        /**
         * AZ specs
         * @type {Array.<MultiZoneSetting> || null}
         */
        this.MultiZoneSettings = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TimeUnit = 'TimeUnit' in params ? params.TimeUnit : null;
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;
        this.Currency = 'Currency' in params ? params.Currency : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.SupportHA = 'SupportHA' in params ? params.SupportHA : null;
        this.Software = 'Software' in params ? params.Software : null;

        if (params.ResourceSpec) {
            let obj = new NewResourceSpec();
            obj.deserialize(params.ResourceSpec)
            this.ResourceSpec = obj;
        }

        if (params.Placement) {
            let obj = new Placement();
            obj.deserialize(params.Placement)
            this.Placement = obj;
        }

        if (params.VPCSettings) {
            let obj = new VPCSettings();
            obj.deserialize(params.VPCSettings)
            this.VPCSettings = obj;
        }
        this.MetaType = 'MetaType' in params ? params.MetaType : null;
        this.UnifyMetaInstanceId = 'UnifyMetaInstanceId' in params ? params.UnifyMetaInstanceId : null;

        if (params.MetaDBInfo) {
            let obj = new CustomMetaInfo();
            obj.deserialize(params.MetaDBInfo)
            this.MetaDBInfo = obj;
        }
        this.ProductId = 'ProductId' in params ? params.ProductId : null;
        this.SceneName = 'SceneName' in params ? params.SceneName : null;

        if (params.ExternalService) {
            this.ExternalService = new Array();
            for (let z in params.ExternalService) {
                let obj = new ExternalService();
                obj.deserialize(params.ExternalService[z]);
                this.ExternalService.push(obj);
            }
        }
        this.VersionID = 'VersionID' in params ? params.VersionID : null;

        if (params.MultiZoneSettings) {
            this.MultiZoneSettings = new Array();
            for (let z in params.MultiZoneSettings) {
                let obj = new MultiZoneSetting();
                obj.deserialize(params.MultiZoneSettings[z]);
                this.MultiZoneSettings.push(obj);
            }
        }

    }
}

/**
 * DescribeSLInstance response structure.
 * @class
 */
class DescribeSLInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Character string identifier of the instance.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Instance name.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Instance billing mode. 0 indicates postpaid, i.e., pay-as-you-go; 1 indicates prepaid, i.e., monthly subscription.
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Instance storage type.
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Instance single-node disk capacity, in GB.
         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * Instance node specifications.
         * @type {string || null}
         */
        this.NodeType = null;

        /**
         * Detailed configuration of the instance AZ, including the AZ name, VPC information, and number of nodes.
         * @type {Array.<ZoneSetting> || null}
         */
        this.ZoneSettings = null;

        /**
         * List of tags bound to the instance.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Numeric identifier of the instance.
         * @type {number || null}
         */
        this.ClusterId = null;

        /**
         * Instance region ID.
         * @type {number || null}
         */
        this.RegionId = null;

        /**
         * Primary AZ of the instance.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Instance expiration time. For post-paid instances, the API returns 0000-00-00 00:00:00.
         * @type {string || null}
         */
        this.ExpireTime = null;

        /**
         * Instance isolation time. For instances that are not isolated, the API returns 0000-00-00 00:00:00.
         * @type {string || null}
         */
        this.IsolateTime = null;

        /**
         * Instance creation time.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Instance status code: -2: "TERMINATED", 2: "RUNNING", 14: "TERMINATING", 19: "ISOLATING", 22: "ADJUSTING", and 201: "ISOLATED".
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Auto-renewal flag. 0: notify before expiration but do not auto-renew; 1: notify before expiration and auto-renew; and 2: do not notify before expiration and do not auto-renew. If the business does not support renewal, the value is 0.
         * @type {number || null}
         */
        this.AutoRenewFlag = null;

        /**
         * Total number of instance nodes.
         * @type {number || null}
         */
        this.NodeNum = null;

        /**
         * 
         * @type {Array.<SLInstance> || null}
         */
        this.SLInstance = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.NodeType = 'NodeType' in params ? params.NodeType : null;

        if (params.ZoneSettings) {
            this.ZoneSettings = new Array();
            for (let z in params.ZoneSettings) {
                let obj = new ZoneSetting();
                obj.deserialize(params.ZoneSettings[z]);
                this.ZoneSettings.push(obj);
            }
        }

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.ClusterId = 'ClusterId' in params ? params.ClusterId : null;
        this.RegionId = 'RegionId' in params ? params.RegionId : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.IsolateTime = 'IsolateTime' in params ? params.IsolateTime : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.AutoRenewFlag = 'AutoRenewFlag' in params ? params.AutoRenewFlag : null;
        this.NodeNum = 'NodeNum' in params ? params.NodeNum : null;

        if (params.SLInstance) {
            this.SLInstance = new Array();
            for (let z in params.SLInstance) {
                let obj = new SLInstance();
                obj.deserialize(params.SLInstance[z]);
                this.SLInstance.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Parameter information of each AZ
 * @class
 */
class MultiZoneSetting extends  AbstractModel {
    constructor(){
        super();

        /**
         * "master", "standby" or "third-party".
         * @type {string || null}
         */
        this.ZoneTag = null;

        /**
         * None
         * @type {VPCSettings || null}
         */
        this.VPCSettings = null;

        /**
         * None
         * @type {Placement || null}
         */
        this.Placement = null;

        /**
         * None
         * @type {NewResourceSpec || null}
         */
        this.ResourceSpec = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ZoneTag = 'ZoneTag' in params ? params.ZoneTag : null;

        if (params.VPCSettings) {
            let obj = new VPCSettings();
            obj.deserialize(params.VPCSettings)
            this.VPCSettings = obj;
        }

        if (params.Placement) {
            let obj = new Placement();
            obj.deserialize(params.Placement)
            this.Placement = obj;
        }

        if (params.ResourceSpec) {
            let obj = new NewResourceSpec();
            obj.deserialize(params.ResourceSpec)
            this.ResourceSpec = obj;
        }

    }
}

/**
 * ModifyAutoRenewFlag request structure.
 * @class
 */
class ModifyAutoRenewFlagRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Instance ID.
         * @type {Array.<string> || null}
         */
        this.ResourceIds = null;

        /**
         * NOTIFY_AND_MANUAL_RENEW: Notification of impending expiration, without auto-renewal. NOTIFY_AND_AUTO_RENEW: Notification of impending expiration, with auto-renewal. DISABLE_NOTIFY_AND_MANUAL_RENEW: No notification of impending expiration, without auto-renewal.
         * @type {string || null}
         */
        this.RenewFlag = null;

        /**
         * Computing resource ID.
         * @type {string || null}
         */
        this.ComputeResourceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ResourceIds = 'ResourceIds' in params ? params.ResourceIds : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;
        this.ComputeResourceId = 'ComputeResourceId' in params ? params.ComputeResourceId : null;

    }
}

/**
 * AddNodeResourceConfig response structure.
 * @class
 */
class AddNodeResourceConfigResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CBS instance information.
 * @class
 */
class CBSInstance extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cloud disk ID.
         * @type {string || null}
         */
        this.DiskId = null;

        /**
         * Cloud disk type.
         * @type {string || null}
         */
        this.DiskUsage = null;

        /**
         * Cloud disk name.
         * @type {string || null}
         */
        this.DiskName = null;

        /**
         * Cloud disk size.
         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * Cloud disk media type.
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Whether to delete it with the instance.
         * @type {boolean || null}
         */
        this.DeleteWithInstance = null;

        /**
         * Cloud disk billing type.
         * @type {string || null}
         */
        this.DiskChargeType = null;

        /**
         * Cloud disk running status.
         * @type {string || null}
         */
        this.DiskState = null;

        /**
         * Whether to perform auto-renewal.
         * @type {string || null}
         */
        this.RenewFlag = null;

        /**
         * Expiration time.
         * @type {string || null}
         */
        this.DeadlineTime = null;

        /**
         * Whether the cloud disk is mounted on the cloud host.
         * @type {boolean || null}
         */
        this.Attached = null;

        /**
         * Days remaining until disk expiration.
         * @type {number || null}
         */
        this.DifferDaysOfDeadline = null;

        /**
         * InstanceId of the CVM instance to which this cloud disk is currently mounted.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.InstanceIdList = null;

        /**
         * ID of the cloud host to which the Cloud disk is mounted.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Whether the cloud disk is a shared cloud disk.
         * @type {boolean || null}
         */
        this.Shareable = null;

        /**
         * EMR node ID.
         * @type {string || null}
         */
        this.EmrResourceId = null;

        /**
         * Committed use expiration time.
         * @type {string || null}
         */
        this.UnderwriteExpiredTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DiskId = 'DiskId' in params ? params.DiskId : null;
        this.DiskUsage = 'DiskUsage' in params ? params.DiskUsage : null;
        this.DiskName = 'DiskName' in params ? params.DiskName : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.DeleteWithInstance = 'DeleteWithInstance' in params ? params.DeleteWithInstance : null;
        this.DiskChargeType = 'DiskChargeType' in params ? params.DiskChargeType : null;
        this.DiskState = 'DiskState' in params ? params.DiskState : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;
        this.DeadlineTime = 'DeadlineTime' in params ? params.DeadlineTime : null;
        this.Attached = 'Attached' in params ? params.Attached : null;
        this.DifferDaysOfDeadline = 'DifferDaysOfDeadline' in params ? params.DifferDaysOfDeadline : null;
        this.InstanceIdList = 'InstanceIdList' in params ? params.InstanceIdList : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Shareable = 'Shareable' in params ? params.Shareable : null;
        this.EmrResourceId = 'EmrResourceId' in params ? params.EmrResourceId : null;
        this.UnderwriteExpiredTime = 'UnderwriteExpiredTime' in params ? params.UnderwriteExpiredTime : null;

    }
}

/**
 * ModifyResourceScheduleConfig request structure.
 * @class
 */
class ModifyResourceScheduleConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * EMR cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Business identifier. `fair`: Edit fair configuration items; `fairPlan`: Edit the execution plan; `capacity`: Edit capacity configuration items.
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Modified module information
         * @type {string || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * Added user information list
 * @class
 */
class UserInfoForUserManager extends  AbstractModel {
    constructor(){
        super();

        /**
         * Username
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * The group to which the user belongs
         * @type {string || null}
         */
        this.UserGroup = null;

        /**
         * 
         * @type {string || null}
         */
        this.PassWord = null;

        /**
         * 
         * @type {string || null}
         */
        this.ReMark = null;

        /**
         * User subgroup.
         * @type {Array.<string> || null}
         */
        this.Groups = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.UserGroup = 'UserGroup' in params ? params.UserGroup : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;
        this.ReMark = 'ReMark' in params ? params.ReMark : null;
        this.Groups = 'Groups' in params ? params.Groups : null;

    }
}

/**
 * The bootstrap action.
 * @class
 */
class ScriptBootstrapActionConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * The COS URL of the script, in the format of `https://beijing-111111.cos.ap-beijing.myqcloud.com/data/test.sh`. For the COS bucket list, see [Bucket List](https://console.cloud.tencent.com/cos/bucket).
         * @type {string || null}
         */
        this.CosFileURI = null;

        /**
         * The execution time of the bootstrap action script. Valid values:
<li>`resourceAfter`: After node initialization</li>
<li>`clusterAfter`: After cluster start</li>
<li>`clusterBefore`: Before cluster start</li>
         * @type {string || null}
         */
        this.ExecutionMoment = null;

        /**
         * The execution script parameter. The parameter format must comply with standard shell specifications.
         * @type {Array.<string> || null}
         */
        this.Args = null;

        /**
         * The script file name.
         * @type {string || null}
         */
        this.CosFileName = null;

        /**
         * Remarks.
         * @type {string || null}
         */
        this.Remark = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CosFileURI = 'CosFileURI' in params ? params.CosFileURI : null;
        this.ExecutionMoment = 'ExecutionMoment' in params ? params.ExecutionMoment : null;
        this.Args = 'Args' in params ? params.Args : null;
        this.CosFileName = 'CosFileName' in params ? params.CosFileName : null;
        this.Remark = 'Remark' in params ? params.Remark : null;

    }
}

/**
 * Kubernetes Label
 * @class
 */
class TkeLabel extends  AbstractModel {
    constructor(){
        super();

        /**
         * Label Name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Label Value
         * @type {string || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * Serverless HBase prepaid settings
 * @class
 */
class PrePaySetting extends  AbstractModel {
    constructor(){
        super();

        /**
         * Time.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Period || null}
         */
        this.Period = null;

        /**
         * Auto-renewal flag. 0: notify before expiration but do not auto-renew; 1: notify before expiration and auto-renew; and 2: do not notify before expiration and do not auto-renew.
         * @type {number || null}
         */
        this.AutoRenewFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Period) {
            let obj = new Period();
            obj.deserialize(params.Period)
            this.Period = obj;
        }
        this.AutoRenewFlag = 'AutoRenewFlag' in params ? params.AutoRenewFlag : null;

    }
}

/**
 * The custom pod permission and parameter.
 * @class
 */
class PodNewParameter extends  AbstractModel {
    constructor(){
        super();

        /**
         * The TKE or EKS cluster ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Custom permissions
Examples:
{
  "apiVersion": "v1",
  "clusters": [
    {
      "cluster": {
        "certificate-authority-data": "xxxxxx==",
        "server": "https://xxxxx.com"
      },
      "name": "cls-xxxxx"
    }
  ],
  "contexts": [
    {
      "context": {
        "cluster": "cls-xxxxx",
        "user": "100014xxxxx"
      },
      "name": "cls-a44yhcxxxxxxxxxx"
    }
  ],
  "current-context": "cls-a4xxxx-context-default",
  "kind": "Config",
  "preferences": {},
  "users": [
    {
      "name": "100014xxxxx",
      "user": {
        "client-certificate-data": "xxxxxx",
        "client-key-data": "xxxxxx"
      }
    }
  ]
}
         * @type {string || null}
         */
        this.Config = null;

        /**
         * Custom parameters
Examples:
{
    "apiVersion": "apps/v1",
    "kind": "Deployment",
    "metadata": {
      "name": "test-deployment",
      "labels": {
        "app": "test"
      }
    },
    "spec": {
      "replicas": 3,
      "selector": {
        "matchLabels": {
          "app": "test-app"
        }
      },
      "template": {
        "metadata": {
          "annotations": {
            "your-organization.com/department-v1": "test-example-v1",
            "your-organization.com/department-v2": "test-example-v2"
          },
          "labels": {
            "app": "test-app",
            "environment": "production"
          }
        },
        "spec": {
          "nodeSelector": {
            "your-organization/node-test": "test-node"
          },
          "containers": [
            {
              "name": "nginx",
              "image": "nginx:1.14.2",
              "ports": [
                {
                  "containerPort": 80
                }
              ]
            }
          ],
          "affinity": {
            "nodeAffinity": {
              "requiredDuringSchedulingIgnoredDuringExecution": {
                "nodeSelectorTerms": [
                  {
                    "matchExpressions": [
                      {
                        "key": "disk-type",
                        "operator": "In",
                        "values": [
                          "ssd",
                          "sas"
                        ]
                      },
                      {
                        "key": "cpu-num",
                        "operator": "Gt",
                        "values": [
                          "6"
                        ]
                      }
                    ]
                  }
                ]
              }
            }
          }
        }
      }
    }
  }
         * @type {string || null}
         */
        this.Parameter = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Config = 'Config' in params ? params.Config : null;
        this.Parameter = 'Parameter' in params ? params.Parameter : null;

    }
}

/**
 * DescribeEmrOverviewMetrics request structure.
 * @class
 */
class DescribeEmrOverviewMetricsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * End time
         * @type {number || null}
         */
        this.End = null;

        /**
         * Metric name. NODE.CPU: average CPU utilization and core count of the node; NODE.CPU.SLHBASE: average CPU utilization and core count of the Serverless instance; HDFS.NN.CAPACITY: storage utilization and total amount.
         * @type {string || null}
         */
        this.Metric = null;

        /**
         * Cluster ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Granularity, for example, 30s-max, 1m-max, and 1h-max.
         * @type {string || null}
         */
        this.Downsample = null;

        /**
         * Start time, not required for pie charts
         * @type {number || null}
         */
        this.Start = null;

        /**
         * Aggregation method, for future use
         * @type {string || null}
         */
        this.Aggregator = null;

        /**
         * Specific type of metrics to be queried, for example, "{"type":"CapacityTotal|CapacityRemaining"}".
         * @type {string || null}
         */
        this.Tags = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.End = 'End' in params ? params.End : null;
        this.Metric = 'Metric' in params ? params.Metric : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Downsample = 'Downsample' in params ? params.Downsample : null;
        this.Start = 'Start' in params ? params.Start : null;
        this.Aggregator = 'Aggregator' in params ? params.Aggregator : null;
        this.Tags = 'Tags' in params ? params.Tags : null;

    }
}

/**
 * ScaleOutCluster response structure.
 * @class
 */
class ScaleOutClusterResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Client token.
         * @type {string || null}
         */
        this.ClientToken = null;

        /**
         * Scale-out process ID.
         * @type {number || null}
         */
        this.FlowId = null;

        /**
         * Query process status and additional flow formation.
         * @type {string || null}
         */
        this.TraceId = null;

        /**
         * Order number.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.DealNames = null;

        /**
         * Large order number.
         * @type {string || null}
         */
        this.BillId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ClientToken = 'ClientToken' in params ? params.ClientToken : null;
        this.FlowId = 'FlowId' in params ? params.FlowId : null;
        this.TraceId = 'TraceId' in params ? params.TraceId : null;
        this.DealNames = 'DealNames' in params ? params.DealNames : null;
        this.BillId = 'BillId' in params ? params.BillId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Process detection information
 * @class
 */
class ServiceProcessFunctionInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Detection alarm level.
         * @type {string || null}
         */
        this.DetectAlert = null;

        /**
         * Detection feature description

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DetetcFunctionKey = null;

        /**
         * Detection feature result

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DetetcFunctionValue = null;

        /**
         * Detection results.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DetetcTime = null;

        /**
         * Detection feature description.
         * @type {string || null}
         */
        this.DetectFunctionKey = null;

        /**
         * Detection feature result.
         * @type {string || null}
         */
        this.DetectFunctionValue = null;

        /**
         * Detection result.
         * @type {string || null}
         */
        this.DetectTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DetectAlert = 'DetectAlert' in params ? params.DetectAlert : null;
        this.DetetcFunctionKey = 'DetetcFunctionKey' in params ? params.DetetcFunctionKey : null;
        this.DetetcFunctionValue = 'DetetcFunctionValue' in params ? params.DetetcFunctionValue : null;
        this.DetetcTime = 'DetetcTime' in params ? params.DetetcTime : null;
        this.DetectFunctionKey = 'DetectFunctionKey' in params ? params.DetectFunctionKey : null;
        this.DetectFunctionValue = 'DetectFunctionValue' in params ? params.DetectFunctionValue : null;
        this.DetectTime = 'DetectTime' in params ? params.DetectTime : null;

    }
}

/**
 * Price details by node part, used for creating the cluster price list
 * @class
 */
class PartDetailPriceItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Types, including node: node (denoting node), rootDisk (denoting system disk), dataDisk (denoting cloud data disk), and metaDB.
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * Unit price (original price).
         * @type {number || null}
         */
        this.Price = null;

        /**
         * Unit price (discounted price).
         * @type {number || null}
         */
        this.RealCost = null;

        /**
         * Total price (discounted price).
         * @type {number || null}
         */
        this.RealTotalCost = null;

        /**
         * Discount.
         * @type {number || null}
         */
        this.Policy = null;

        /**
         * Quantity.
         * @type {number || null}
         */
        this.GoodsNum = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.Price = 'Price' in params ? params.Price : null;
        this.RealCost = 'RealCost' in params ? params.RealCost : null;
        this.RealTotalCost = 'RealTotalCost' in params ? params.RealTotalCost : null;
        this.Policy = 'Policy' in params ? params.Policy : null;
        this.GoodsNum = 'GoodsNum' in params ? params.GoodsNum : null;

    }
}

/**
 * Shared component information
 * @class
 */
class ExternalService extends  AbstractModel {
    constructor(){
        super();

        /**
         * Shared component type, which can be EMR or CUSTOM
         * @type {string || null}
         */
        this.ShareType = null;

        /**
         * Custom parameters
         * @type {Array.<CustomServiceDefine> || null}
         */
        this.CustomServiceDefineList = null;

        /**
         * Shared component name
         * @type {string || null}
         */
        this.Service = null;

        /**
         * Shared component cluster
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ShareType = 'ShareType' in params ? params.ShareType : null;

        if (params.CustomServiceDefineList) {
            this.CustomServiceDefineList = new Array();
            for (let z in params.CustomServiceDefineList) {
                let obj = new CustomServiceDefine();
                obj.deserialize(params.CustomServiceDefineList[z]);
                this.CustomServiceDefineList.push(obj);
            }
        }
        this.Service = 'Service' in params ? params.Service : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * Component restart policy
 * @class
 */
class RestartPolicy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Restart policy name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Policy display name
         * @type {string || null}
         */
        this.DisplayName = null;

        /**
         * Policy description
         * @type {string || null}
         */
        this.Describe = null;

        /**
         * Optional range for the number of batch restarted nodes
         * @type {Array.<number> || null}
         */
        this.BatchSizeRange = null;

        /**
         * Whether it is the default policy
         * @type {string || null}
         */
        this.IsDefault = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.DisplayName = 'DisplayName' in params ? params.DisplayName : null;
        this.Describe = 'Describe' in params ? params.Describe : null;
        this.BatchSizeRange = 'BatchSizeRange' in params ? params.BatchSizeRange : null;
        this.IsDefault = 'IsDefault' in params ? params.IsDefault : null;

    }
}

/**
 * InquiryPriceUpdateInstance response structure.
 * @class
 */
class InquiryPriceUpdateInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Original price.
         * @type {number || null}
         */
        this.OriginalCost = null;

        /**
         * Discounted price.
         * @type {number || null}
         */
        this.DiscountCost = null;

        /**
         * Time unit of resizing. Valid values:
<li>s: second.</li>
         * @type {string || null}
         */
        this.TimeUnit = null;

        /**
         * Desizing duration.
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         * Pricing details
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<PriceDetail> || null}
         */
        this.PriceDetail = null;

        /**
         * New configuration price.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {PriceResult || null}
         */
        this.NewConfigPrice = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.OriginalCost = 'OriginalCost' in params ? params.OriginalCost : null;
        this.DiscountCost = 'DiscountCost' in params ? params.DiscountCost : null;
        this.TimeUnit = 'TimeUnit' in params ? params.TimeUnit : null;
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;

        if (params.PriceDetail) {
            this.PriceDetail = new Array();
            for (let z in params.PriceDetail) {
                let obj = new PriceDetail();
                obj.deserialize(params.PriceDetail[z]);
                this.PriceDetail.push(obj);
            }
        }

        if (params.NewConfigPrice) {
            let obj = new PriceResult();
            obj.deserialize(params.NewConfigPrice)
            this.NewConfigPrice = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeServiceConfGroupInfos response structure.
 * @class
 */
class DescribeServiceConfGroupInfosResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List size.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Configuration item key-value list.
         * @type {Array.<ConfigurationItem> || null}
         */
        this.ConfItemKVList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.ConfItemKVList) {
            this.ConfItemKVList = new Array();
            for (let z in params.ConfItemKVList) {
                let obj = new ConfigurationItem();
                obj.deserialize(params.ConfItemKVList[z]);
                this.ConfItemKVList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Relationship between shared components and the current cluster
 * @class
 */
class ClusterExternalServiceInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Dependency relationship. 0: being depended on by other clusters, 1: depending on other clusters.
         * @type {number || null}
         */
        this.DependType = null;

        /**
         * Shared component.
         * @type {string || null}
         */
        this.Service = null;

        /**
         * Shared cluster.
         * @type {string || null}
         */
        this.ClusterId = null;

        /**
         * Shared cluster status.
         * @type {number || null}
         */
        this.ClusterStatus = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DependType = 'DependType' in params ? params.DependType : null;
        this.Service = 'Service' in params ? params.Service : null;
        this.ClusterId = 'ClusterId' in params ? params.ClusterId : null;
        this.ClusterStatus = 'ClusterStatus' in params ? params.ClusterStatus : null;

    }
}

/**
 * ModifyUsersOfGroupSTD response structure.
 * @class
 */
class ModifyUsersOfGroupSTDResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether modification is successful.
         * @type {boolean || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Data = 'Data' in params ? params.Data : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Client component dependencies
 * @class
 */
class SoftDependInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * The component name.
         * @type {string || null}
         */
        this.SoftName = null;

        /**
         * Whether the component is required.
         * @type {boolean || null}
         */
        this.Required = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SoftName = 'SoftName' in params ? params.SoftName : null;
        this.Required = 'Required' in params ? params.Required : null;

    }
}

/**
 * ModifyAutoScaleStrategy response structure.
 * @class
 */
class ModifyAutoScaleStrategyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeNodeSpec response structure.
 * @class
 */
class DescribeNodeSpecResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Node specification type.
         * @type {Array.<DescribeNodeSpec> || null}
         */
        this.NodeSpecs = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.NodeSpecs) {
            this.NodeSpecs = new Array();
            for (let z in params.NodeSpecs) {
                let obj = new DescribeNodeSpec();
                obj.deserialize(params.NodeSpecs[z]);
                this.NodeSpecs.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeStarRocksQueryInfo request structure.
 * @class
 */
class DescribeStarRocksQueryInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Query information obtainment start time (seconds).
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * Query information obtainment end time (seconds).
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Page size for pagination query. The minimum value is 1, and the maximum value is 100.
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Page number for pagination queries, starting from 1.
         * @type {number || null}
         */
        this.Page = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.Page = 'Page' in params ? params.Page : null;

    }
}

/**
 * ModifySLInstance response structure.
 * @class
 */
class ModifySLInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Load metric.
 * @class
 */
class LoadMetricsConditions extends  AbstractModel {
    constructor(){
        super();

        /**
         * Trigger rule condition.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<LoadMetricsCondition> || null}
         */
        this.LoadMetrics = null;

        /**
         * 0: all conditions should be met.
1: any one of the conditions is met.
         * @type {number || null}
         */
        this.Match = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.LoadMetrics) {
            this.LoadMetrics = new Array();
            for (let z in params.LoadMetrics) {
                let obj = new LoadMetricsCondition();
                obj.deserialize(params.LoadMetrics[z]);
                this.LoadMetrics.push(obj);
            }
        }
        this.Match = 'Match' in params ? params.Match : null;

    }
}

/**
 * ModifyGlobalConfig request structure.
 * @class
 */
class ModifyGlobalConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * English ID of the EMR cluster.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * List of modified configurations. Key values have a one-to-one correspondence with the output parameters of the `DescribeGlobalConfig` API and are case-insensitive (if an error occurs indicating the key cannot be found, refer to the output parameters). The values are:
1. enableResourceSchedule: Enables or disables resource scheduling. When disabling, a synchronous operation option (sync) is available with values true or false.
2. scheduler type: scheduler.
2. enableLabel: Enables or disables tags, with values true or false.
2. tag directory: labelDir.
3. whether to overwrite the user-specified queue, with values true or false.
4. userMaxAppsDefault: program upper limit.
5. dynamic configuration item: Corresponds to the Name field in the DefaultSettings object returned by the DescribeGlobalConfig API.
The values are strings. For **whether to overwrite the user-specified queue** and **program upper limit**, null in the JSON specifications means clearing the value of this configuration. Individual configuration items can be modified. For **dynamic configurations**, a full transmission is required to perform overwriting.
         * @type {Array.<Item> || null}
         */
        this.Items = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.Items) {
            this.Items = new Array();
            for (let z in params.Items) {
                let obj = new Item();
                obj.deserialize(params.Items[z]);
                this.Items.push(obj);
            }
        }

    }
}

/**
 * DescribeEmrApplicationStatics response structure.
 * @class
 */
class DescribeEmrApplicationStaticsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application statistics
         * @type {Array.<ApplicationStatics> || null}
         */
        this.Statics = null;

        /**
         * Total count
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Available queue name
         * @type {Array.<string> || null}
         */
        this.Queues = null;

        /**
         * Available usernames
         * @type {Array.<string> || null}
         */
        this.Users = null;

        /**
         * Available application type
         * @type {Array.<string> || null}
         */
        this.ApplicationTypes = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Statics) {
            this.Statics = new Array();
            for (let z in params.Statics) {
                let obj = new ApplicationStatics();
                obj.deserialize(params.Statics[z]);
                this.Statics.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.Queues = 'Queues' in params ? params.Queues : null;
        this.Users = 'Users' in params ? params.Users : null;
        this.ApplicationTypes = 'ApplicationTypes' in params ? params.ApplicationTypes : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Resource details.
 * @class
 */
class ResourceDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifications.
         * @type {string || null}
         */
        this.Spec = null;

        /**
         * Specifications name.
         * @type {string || null}
         */
        this.SpecName = null;

        /**
         * Hard disk type.
         * @type {number || null}
         */
        this.StorageType = null;

        /**
         * Hard disk type.
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * System disk size.
         * @type {number || null}
         */
        this.RootSize = null;

        /**
         * Memory size.
         * @type {number || null}
         */
        this.MemSize = null;

        /**
         * Number of CPUs.
         * @type {number || null}
         */
        this.Cpu = null;

        /**
         * Hard disk size.
         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * Specifications.
         * @type {string || null}
         */
        this.InstanceType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Spec = 'Spec' in params ? params.Spec : null;
        this.SpecName = 'SpecName' in params ? params.SpecName : null;
        this.StorageType = 'StorageType' in params ? params.StorageType : null;
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.RootSize = 'RootSize' in params ? params.RootSize : null;
        this.MemSize = 'MemSize' in params ? params.MemSize : null;
        this.Cpu = 'Cpu' in params ? params.Cpu : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;

    }
}

/**
 * Load metric condition.
 * @class
 */
class LoadMetricsCondition extends  AbstractModel {
    constructor(){
        super();

        /**
         * Rule statistics cycle. Options include 1 min, 3 min, and 5 min.
         * @type {number || null}
         */
        this.StatisticPeriod = null;

        /**
         * Trigger count. Scaling begins only after it has been triggered continuously more than TriggerThreshold times.
         * @type {number || null}
         */
        this.TriggerThreshold = null;

        /**
         * Scaling load metric.
         * @type {string || null}
         */
        this.LoadMetrics = null;

        /**
         * Rule metadata record ID.
         * @type {number || null}
         */
        this.MetricId = null;

        /**
         * Trigger condition.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<TriggerCondition> || null}
         */
        this.Conditions = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StatisticPeriod = 'StatisticPeriod' in params ? params.StatisticPeriod : null;
        this.TriggerThreshold = 'TriggerThreshold' in params ? params.TriggerThreshold : null;
        this.LoadMetrics = 'LoadMetrics' in params ? params.LoadMetrics : null;
        this.MetricId = 'MetricId' in params ? params.MetricId : null;

        if (params.Conditions) {
            this.Conditions = new Array();
            for (let z in params.Conditions) {
                let obj = new TriggerCondition();
                obj.deserialize(params.Conditions[z]);
                this.Conditions.push(obj);
            }
        }

    }
}

/**
 * The user-created Hive-MetaDB instance information.
 * @class
 */
class CustomMetaDBInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * The JDBC URL of the custom metadatabase instance. Example: jdbc:mysql://10.10.10.10:3306/dbname
         * @type {string || null}
         */
        this.MetaDataJdbcUrl = null;

        /**
         * The custom metadatabase instance username.
         * @type {string || null}
         */
        this.MetaDataUser = null;

        /**
         * The custom metadatabase instance password.
         * @type {string || null}
         */
        this.MetaDataPass = null;

        /**
         * The Hive-shared metadatabase type. Valid values:
<li>`EMR_DEFAULT_META`: The cluster creates one by default.</li>
<li>`EMR_EXIST_META`: The cluster uses the specified EMR metadatabase instance.</li>
<li>`USER_CUSTOM_META`: The cluster uses a custom metadatabase instance.</li>
         * @type {string || null}
         */
        this.MetaType = null;

        /**
         * The EMR-MetaDB instance.
         * @type {string || null}
         */
        this.UnifyMetaInstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MetaDataJdbcUrl = 'MetaDataJdbcUrl' in params ? params.MetaDataJdbcUrl : null;
        this.MetaDataUser = 'MetaDataUser' in params ? params.MetaDataUser : null;
        this.MetaDataPass = 'MetaDataPass' in params ? params.MetaDataPass : null;
        this.MetaType = 'MetaType' in params ? params.MetaType : null;
        this.UnifyMetaInstanceId = 'UnifyMetaInstanceId' in params ? params.UnifyMetaInstanceId : null;

    }
}

/**
 * A key-value structure
 * @class
 */
class Item extends  AbstractModel {
    constructor(){
        super();

        /**
         * Key value.
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Value.
         * @type {string || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * Resource description for container resource scale-out
 * @class
 */
class PodSpec extends  AbstractModel {
    constructor(){
        super();

        /**
         * Identifier of external resource provider, such as "cls-a1cd23fa".
         * @type {string || null}
         */
        this.ResourceProviderIdentifier = null;

        /**
         * Type of external resource provider, such as "tke". Currently, only "tke" is supported.
         * @type {string || null}
         */
        this.ResourceProviderType = null;

        /**
         * Purpose of the resource, which means the node type and can only be "TASK".
         * @type {string || null}
         */
        this.NodeType = null;

        /**
         * Number of CPUs
         * @type {number || null}
         */
        this.Cpu = null;

        /**
         * Memory size in GB.
         * @type {number || null}
         */
        this.Memory = null;

        /**
         * Mount point of resources for the host. A specified mount point corresponds to the host path and is used as the data storage directory in the pod. (This parameter has been disused)
         * @type {Array.<string> || null}
         */
        this.DataVolumes = null;

        /**
         * EKS cluster - CPU type. Valid values: `intel` and `amd`.
         * @type {string || null}
         */
        this.CpuType = null;

        /**
         * Data directory mounting information of the pod node.
         * @type {Array.<PodVolume> || null}
         */
        this.PodVolumes = null;

        /**
         * Whether floating specification is used. `1`: Yes; `0`: No.
         * @type {number || null}
         */
        this.IsDynamicSpec = null;

        /**
         * Floating specification
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {DynamicPodSpec || null}
         */
        this.DynamicPodSpec = null;

        /**
         * Unique ID of VPC network.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Unique ID of a VPC subnet.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * pod name
         * @type {string || null}
         */
        this.PodName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceProviderIdentifier = 'ResourceProviderIdentifier' in params ? params.ResourceProviderIdentifier : null;
        this.ResourceProviderType = 'ResourceProviderType' in params ? params.ResourceProviderType : null;
        this.NodeType = 'NodeType' in params ? params.NodeType : null;
        this.Cpu = 'Cpu' in params ? params.Cpu : null;
        this.Memory = 'Memory' in params ? params.Memory : null;
        this.DataVolumes = 'DataVolumes' in params ? params.DataVolumes : null;
        this.CpuType = 'CpuType' in params ? params.CpuType : null;

        if (params.PodVolumes) {
            this.PodVolumes = new Array();
            for (let z in params.PodVolumes) {
                let obj = new PodVolume();
                obj.deserialize(params.PodVolumes[z]);
                this.PodVolumes.push(obj);
            }
        }
        this.IsDynamicSpec = 'IsDynamicSpec' in params ? params.IsDynamicSpec : null;

        if (params.DynamicPodSpec) {
            let obj = new DynamicPodSpec();
            obj.deserialize(params.DynamicPodSpec)
            this.DynamicPodSpec = obj;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.PodName = 'PodName' in params ? params.PodName : null;

    }
}

/**
 * ModifySLInstanceBasic response structure.
 * @class
 */
class ModifySLInstanceBasicResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeStarRocksQueryInfo response structure.
 * @class
 */
class DescribeStarRocksQueryInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number, which is used for pagination query.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * StarRocks information list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<StarRocksQueryInfo> || null}
         */
        this.StarRocksQueryInfoList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.StarRocksQueryInfoList) {
            this.StarRocksQueryInfoList = new Array();
            for (let z in params.StarRocksQueryInfoList) {
                let obj = new StarRocksQueryInfo();
                obj.deserialize(params.StarRocksQueryInfoList[z]);
                this.StarRocksQueryInfoList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Spark task list.
 * @class
 */
class SparkApplicationsList extends  AbstractModel {
    constructor(){
        super();

        /**
         * Application ID.
         * @type {string || null}
         */
        this.ID = null;

        /**
         * Application name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * User.
         * @type {string || null}
         */
        this.User = null;

        /**
         * Start time.
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * End time.
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Duration.
         * @type {number || null}
         */
        this.Duration = null;

        /**
         * Status.
         * @type {string || null}
         */
        this.State = null;

        /**
         * Type.
         * @type {string || null}
         */
        this.ApplicationType = null;

        /**
         * Number of cores multiplied by seconds.
         * @type {number || null}
         */
        this.CoreSeconds = null;

        /**
         * Memory MB multiplied by seconds.
         * @type {string || null}
         */
        this.MemorySeconds = null;

        /**
         * Insight result.
         * @type {string || null}
         */
        this.Insight = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ID = 'ID' in params ? params.ID : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.User = 'User' in params ? params.User : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Duration = 'Duration' in params ? params.Duration : null;
        this.State = 'State' in params ? params.State : null;
        this.ApplicationType = 'ApplicationType' in params ? params.ApplicationType : null;
        this.CoreSeconds = 'CoreSeconds' in params ? params.CoreSeconds : null;
        this.MemorySeconds = 'MemorySeconds' in params ? params.MemorySeconds : null;
        this.Insight = 'Insight' in params ? params.Insight : null;

    }
}

/**
 * Resource scheduling - Queue modification information
 * @class
 */
class ConfigModifyInfoV2 extends  AbstractModel {
    constructor(){
        super();

        /**
         * Operation type. Valid values:

- 0: create a queue.
- 1: edit - full overwrite.
- 2: create a sub-queue.
- 3: delete.
- 4: clone. It is the same as sub-queue creation. Especially, for `fair`, a sub-queue can be copied to a new queue.
- 6: edit - incremental update.
         * @type {number || null}
         */
        this.OpType = null;

        /**
         * Queue name. It cannot be modified.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Create root queue: Pass "myId of root"; Create sub-queue: Pass "myId of the selected queue"; Clone queue: Pass "parentId of the selected queue".
         * @type {string || null}
         */
        this.ParentId = null;

        /**
         * Edit or delete operations: Require passing "myId of the selected queue". Passing is required for cloning only when the scheduler is `fair` in order to copy a sub-queue to a new queue.
         * @type {string || null}
         */
        this.MyId = null;

        /**
         * Basic configuration. The value of key is consistent with the field returned by **DescribeYarnQueue**.###### Fair scheduler
Values of key are as follows:

- type: parent queue. Value: **parent** or **null**.
- aclSubmitApps: submission ACL. Value: **JSON string of the AclForYarnQueue type** or **null**.
- aclAdministerApps: administration ACL. Value: **JSON string of the AclForYarnQueue type** or **null**.
- minSharePreemptionTimeout: timeout of minimum share before preemption. Value: **numeric string** or **null**.
- fairSharePreemptionTimeout: timeout of fair share before preemption. Value: **numeric string** or **null**.
- fairSharePreemptionThreshold: fair share preemption threshold. Value: **numeric string** or **null**. Numeric string range: (0,1].
- allowPreemptionFrom: preemption mode. Value: **Boolean string** or **null**.
- schedulingPolicy: scheduling policy. Value: **drf**, **fair**, **fifo**, or **null**.

```
type AclForYarnQueue struct {
	User  *string `json:"user"` // Username
	Group *string `json:"group"`// Group name
}
```
###### Capacity scheduler
Values of key are as follows:

- state: queue status. Value: **STOPPED** or **RUNNING**.
- default-node-label-expression: default tag expression. Value: **tag** or **null**.
- acl_submit_applications: submission ACL. Value: **JSON string of the AclForYarnQueue type** or **null**.
- acl_administer_queue: administration ACL. Value: **JSON string of the AclForYarnQueue type** or **null**.
- maximum-allocation-mb: maximum memory allocated to each container. Value: **numeric string** or **null**.
- maximum-allocation-vcores: maximum number of virtual cores allocated to each container. Value: **numeric string** or **null**.
```
type AclForYarnQueue struct {
	User  *string `json:"user"` // Username
	Group *string `json:"group"`// Group name
}
```
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ItemSeq || null}
         */
        this.BasicParams = null;

        /**
         * Configuration set information. For the values, see the parameter description of ConfigSetInfo. Configuration set is the representation of the plan mode in the queue, containing different configuration item values for different time periods. The configuration set names of all queues are the same. For a single queue, the tags and parameters in each configuration set are the same, but the parameter values are different.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ConfigSetInfo> || null}
         */
        this.ConfigSetParams = null;

        /**
         * This parameter is specific for capacity scheduling and is valid only when `OpType` is set to `6`. It indicates tags to be deleted from the queue. This parameter has a higher priority than LabelParams in ConfigSetParams.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.DeleteLables = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.OpType = 'OpType' in params ? params.OpType : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.ParentId = 'ParentId' in params ? params.ParentId : null;
        this.MyId = 'MyId' in params ? params.MyId : null;

        if (params.BasicParams) {
            let obj = new ItemSeq();
            obj.deserialize(params.BasicParams)
            this.BasicParams = obj;
        }

        if (params.ConfigSetParams) {
            this.ConfigSetParams = new Array();
            for (let z in params.ConfigSetParams) {
                let obj = new ConfigSetInfo();
                obj.deserialize(params.ConfigSetParams[z]);
                this.ConfigSetParams.push(obj);
            }
        }
        this.DeleteLables = 'DeleteLables' in params ? params.DeleteLables : null;

    }
}

/**
 * ModifyUserManagerPwd request structure.
 * @class
 */
class ModifyUserManagerPwdRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Username
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Password
         * @type {string || null}
         */
        this.PassWord = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PassWord = 'PassWord' in params ? params.PassWord : null;

    }
}

/**
 * InquiryPriceScaleOutInstance response structure.
 * @class
 */
class InquiryPriceScaleOutInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Original price.
         * @type {string || null}
         */
        this.OriginalCost = null;

        /**
         * Discounted price.
         * @type {string || null}
         */
        this.DiscountCost = null;

        /**
         * Time unit of scale-out. Valid values.
<li>s: second.</li>
         * @type {string || null}
         */
        this.Unit = null;

        /**
         * Node spec queried for price.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {PriceResource || null}
         */
        this.PriceSpec = null;

        /**
         * The inquiry results corresponding to the specs specified by the input parameter `MultipleResources`, with the result of the first spec returned by other output parameters.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<EmrPrice> || null}
         */
        this.MultipleEmrPrice = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.OriginalCost = 'OriginalCost' in params ? params.OriginalCost : null;
        this.DiscountCost = 'DiscountCost' in params ? params.DiscountCost : null;
        this.Unit = 'Unit' in params ? params.Unit : null;

        if (params.PriceSpec) {
            let obj = new PriceResource();
            obj.deserialize(params.PriceSpec)
            this.PriceSpec = obj;
        }

        if (params.MultipleEmrPrice) {
            this.MultipleEmrPrice = new Array();
            for (let z in params.MultipleEmrPrice) {
                let obj = new EmrPrice();
                obj.deserialize(params.MultipleEmrPrice[z]);
                this.MultipleEmrPrice.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyInstanceBasic response structure.
 * @class
 */
class ModifyInstanceBasicResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * User group information.
 * @class
 */
class GroupInfos extends  AbstractModel {
    constructor(){
        super();

        /**
         * User group name.
         * @type {string || null}
         */
        this.GroupName = null;

        /**
         * User name list.
         * @type {Array.<string> || null}
         */
        this.Users = null;

        /**
         * Remarks.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Creation time.
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * User group type.
         * @type {number || null}
         */
        this.GroupType = null;

        /**
         * User group type description.
         * @type {string || null}
         */
        this.GroupTypeDesc = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GroupName = 'GroupName' in params ? params.GroupName : null;
        this.Users = 'Users' in params ? params.Users : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.GroupType = 'GroupType' in params ? params.GroupType : null;
        this.GroupTypeDesc = 'GroupTypeDesc' in params ? params.GroupTypeDesc : null;

    }
}

/**
 * ModifyResourceScheduler response structure.
 * @class
 */
class ModifyResourceSchedulerResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * A key-value pair filter used for condition filtering and queries.
 * @class
 */
class Filter extends  AbstractModel {
    constructor(){
        super();

        /**
         * Fields that need to be filtered.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Filter value of the field.
         * @type {Array.<string> || null}
         */
        this.Values = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Values = 'Values' in params ? params.Values : null;

    }
}

/**
 * VPC parameters
 * @class
 */
class VirtualPrivateCloud extends  AbstractModel {
    constructor(){
        super();

        /**
         * The VPC ID.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * The subnet ID.
         * @type {string || null}
         */
        this.SubnetId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;

    }
}

/**
 * Restart, stop, or start of service/monitoring configurations
 * @class
 */
class StrategyConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * 0: disable rolling restart.
1: enable rolling start.
         * @type {number || null}
         */
        this.RollingRestartSwitch = null;

        /**
         * Rolling restart quantity per batch, which is up to 99999.
         * @type {number || null}
         */
        this.BatchSize = null;

        /**
         * Stop and wait time for rolling restart per batch, with the maximum interval of 5 minutes and the unit of seconds.
         * @type {number || null}
         */
        this.TimeWait = null;

        /**
         * Operation failure processing policy. 0: Block upon failure, 1: Automatically skipping failure.
         * @type {number || null}
         */
        this.DealOnFail = null;

        /**
         * Parameters required in the instruction.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Arg> || null}
         */
        this.Args = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RollingRestartSwitch = 'RollingRestartSwitch' in params ? params.RollingRestartSwitch : null;
        this.BatchSize = 'BatchSize' in params ? params.BatchSize : null;
        this.TimeWait = 'TimeWait' in params ? params.TimeWait : null;
        this.DealOnFail = 'DealOnFail' in params ? params.DealOnFail : null;

        if (params.Args) {
            this.Args = new Array();
            for (let z in params.Args) {
                let obj = new Arg();
                obj.deserialize(params.Args[z]);
                this.Args.push(obj);
            }
        }

    }
}

/**
 * The configuration of cluster application scenario and supported components.
 * @class
 */
class SceneSoftwareConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * The list of deployed components. The list of component options varies by `ProductVersion` (EMR version). For more information, see [Component Version](https://intl.cloud.tencent.com/document/product/589/20279?from_cn_redirect=1).
The instance type, `hive` or `flink`.
         * @type {Array.<string> || null}
         */
        this.Software = null;

        /**
         * The scenario name, which defaults to `Hadoop-Default`. For more details, see [here](https://intl.cloud.tencent.com/document/product/589/14624?from_cn_redirect=1). Valid values:
Hadoop-Kudu
Hadoop-Zookeeper
Hadoop-Presto
Hadoop-Hbase
Hadoop-Default
         * @type {string || null}
         */
        this.SceneName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Software = 'Software' in params ? params.Software : null;
        this.SceneName = 'SceneName' in params ? params.SceneName : null;

    }
}

/**
 * Node information
 * @class
 */
class ShortNodeInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Node type: Master/Core/Task/Router/Common.
         * @type {string || null}
         */
        this.NodeType = null;

        /**
         * Number of nodes.
         * @type {number || null}
         */
        this.NodeSize = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NodeType = 'NodeType' in params ? params.NodeType : null;
        this.NodeSize = 'NodeSize' in params ? params.NodeSize : null;

    }
}

/**
 * DescribeTrinoQueryInfo request structure.
 * @class
 */
class DescribeTrinoQueryInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Obtain the start time for querying information (s).
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * Obtain the end time for querying information (s).
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Page size for pagination queries. Minimum value: 1; maximum value: 100.
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Page number for pagination queries, starting from 1.
         * @type {number || null}
         */
        this.Page = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.Page = 'Page' in params ? params.Page : null;

    }
}

/**
 * EMR inquiry description
 * @class
 */
class EmrPrice extends  AbstractModel {
    constructor(){
        super();

        /**
         * List price.
         * @type {string || null}
         */
        this.OriginalCost = null;

        /**
         * Discounted price.
         * @type {string || null}
         */
        this.DiscountCost = null;

        /**
         * Unit.
         * @type {string || null}
         */
        this.Unit = null;

        /**
         * The queried spec.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {PriceResource || null}
         */
        this.PriceSpec = null;

        /**
         * Whether spot instances are supported.
         * @type {boolean || null}
         */
        this.SupportSpotPaid = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.OriginalCost = 'OriginalCost' in params ? params.OriginalCost : null;
        this.DiscountCost = 'DiscountCost' in params ? params.DiscountCost : null;
        this.Unit = 'Unit' in params ? params.Unit : null;

        if (params.PriceSpec) {
            let obj = new PriceResource();
            obj.deserialize(params.PriceSpec)
            this.PriceSpec = obj;
        }
        this.SupportSpotPaid = 'SupportSpotPaid' in params ? params.SupportSpotPaid : null;

    }
}

/**
 * ModifyInspectionSettings request structure.
 * @class
 */
class ModifyInspectionSettingsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Inspection type, FixedTime or RealTime.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Task configurations.
         * @type {Array.<InspectionTaskSettings> || null}
         */
        this.Settings = null;

        /**
         * Start timestamp.
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * End timestamp.
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Inspection cycle, such as EveryDay, EveryWeek or EveryMonth.
         * @type {string || null}
         */
        this.Strategy = null;

        /**
         * Start time of each day.
         * @type {string || null}
         */
        this.Clock = null;

        /**
         * Day of the week.
         * @type {string || null}
         */
        this.DayOfWeek = null;

        /**
         * Number of the day in a month.
         * @type {string || null}
         */
        this.DayOfMonth = null;

        /**
         * Inspection job ID.
         * @type {string || null}
         */
        this.JobId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Type = 'Type' in params ? params.Type : null;

        if (params.Settings) {
            this.Settings = new Array();
            for (let z in params.Settings) {
                let obj = new InspectionTaskSettings();
                obj.deserialize(params.Settings[z]);
                this.Settings.push(obj);
            }
        }
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Strategy = 'Strategy' in params ? params.Strategy : null;
        this.Clock = 'Clock' in params ? params.Clock : null;
        this.DayOfWeek = 'DayOfWeek' in params ? params.DayOfWeek : null;
        this.DayOfMonth = 'DayOfMonth' in params ? params.DayOfMonth : null;
        this.JobId = 'JobId' in params ? params.JobId : null;

    }
}

/**
 * Node hardware information
 * @class
 */
class NodeHardwareInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * User AppID.
         * @type {number || null}
         */
        this.AppId = null;

        /**
         * Serial number.
         * @type {string || null}
         */
        this.SerialNo = null;

        /**
         * Machine instance ID.
         * @type {string || null}
         */
        this.OrderNo = null;

        /**
         * Public network IP address bound for the Master node.
         * @type {string || null}
         */
        this.WanIp = null;

        /**
         * Node type. 0: Common node; 1: Master node.
 2: Core node; 3: Task node.
         * @type {number || null}
         */
        this.Flag = null;

        /**
         * Node specifications.
         * @type {string || null}
         */
        this.Spec = null;

        /**
         * Number of node cores.
         * @type {number || null}
         */
        this.CpuNum = null;

        /**
         * Node memory (bytes).
         * @type {number || null}
         */
        this.MemSize = null;

        /**
         * Node memory (GB).
         * @type {string || null}
         */
        this.MemDesc = null;

        /**
         * The region where the node is located.
         * @type {number || null}
         */
        this.RegionId = null;

        /**
         * The zone where the node is located.
         * @type {number || null}
         */
        this.ZoneId = null;

        /**
         * Application time.
         * @type {string || null}
         */
        this.ApplyTime = null;

        /**
         * Release time.
         * @type {string || null}
         */
        this.FreeTime = null;

        /**
         * Hard disk size.
         * @type {string || null}
         */
        this.DiskSize = null;

        /**
         * Node description.
         * @type {string || null}
         */
        this.NameTag = null;

        /**
         * Node deployment service.
         * @type {string || null}
         */
        this.Services = null;

        /**
         * Disk type. Valid values: 1 (Local Disk), 2 (Cloud Disk), 3 (Local SSD), 4 (Cloud SSD), 5 (Premium Cloud Disk), 6 (Enhanced SSD), 11 (Throughput SSD), 12 (Tremendous SSD), 13 (Balanced SSD), 14 (Big Data Cloud Disk), 15 (High IO Cloud Disk), and 16 (Remote SSD).

         * @type {number || null}
         */
        this.StorageType = null;

        /**
         * System disk size (GB).
         * @type {number || null}
         */
        this.RootSize = null;

        /**
         * Payment type. Valid values: 0 (pay-as-you-go); 1 (yearly/monthly subscription).
         * @type {number || null}
         */
        this.ChargeType = null;

        /**
         * Database IP address.
         * @type {string || null}
         */
        this.CdbIp = null;

        /**
         * Database port.
         * @type {number || null}
         */
        this.CdbPort = null;

        /**
         * Hard disk capacity (bytes).
         * @type {number || null}
         */
        this.HwDiskSize = null;

        /**
         * Hard disk capacity description.
         * @type {string || null}
         */
        this.HwDiskSizeDesc = null;

        /**
         * Memory capacity (bytes).
         * @type {number || null}
         */
        this.HwMemSize = null;

        /**
         * Memory capacity description.
         * @type {string || null}
         */
        this.HwMemSizeDesc = null;

        /**
         * Expiration time.
         * @type {string || null}
         */
        this.ExpireTime = null;

        /**
         * Node resource ID.
         * @type {string || null}
         */
        this.EmrResourceId = null;

        /**
         * Renewal flag.
         * @type {number || null}
         */
        this.IsAutoRenew = null;

        /**
         * Device identification.
         * @type {string || null}
         */
        this.DeviceClass = null;

        /**
         * Supporting resizing.
         * @type {number || null}
         */
        this.Mutable = null;

        /**
         * Multi-cloud disk
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {Array.<MultiDiskMC> || null}
         */
        this.MCMultiDisk = null;

        /**
         * Database information
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {CdbInfo || null}
         */
        this.CdbNodeInfo = null;

        /**
         * Private network IP address.
         * @type {string || null}
         */
        this.Ip = null;

        /**
         * Whether this node can be terminated. 1: Yes, 0: No.
         * @type {number || null}
         */
        this.Destroyable = null;

        /**
         * Tags bound to node
Note: this field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Whether it is an automatic scaling node. 0: common node, 1: automatic scaling node.
         * @type {number || null}
         */
        this.AutoFlag = null;

        /**
         * Resource type, with the valid values of "host" and "pod".
         * @type {string || null}
         */
        this.HardwareResourceType = null;

        /**
         * Whether it is a floating specification. 1: Yes, 0: No.
         * @type {number || null}
         */
        this.IsDynamicSpec = null;

        /**
         * Floating specification value in the JSON string format.
         * @type {string || null}
         */
        this.DynamicPodSpec = null;

        /**
         * Whether the billing type can be changed. 1: Yes, 0: No.
         * @type {number || null}
         */
        this.SupportModifyPayMode = null;

        /**
         * System disk type. Valid values: 1 (Local Disk), 2 (Cloud Disk), 3 (Local SSD), 4 (Cloud SSD), 5 (Premium Cloud Disk), 6 (Enhanced SSD), 11 (Throughput HDD), 12 (Tremendous SSD), 13 (Balanced SSD), 14 (Big Data Cloud Disk), 15 (High IO Cloud Disk), and 16 (Remote SSD).
         * @type {number || null}
         */
        this.RootStorageType = null;

        /**
         * Availability information.
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Subnet
Note: This field may return `null`, indicating that no valid value can be obtained.
         * @type {SubnetInfo || null}
         */
        this.SubnetInfo = null;

        /**
         * Client.
         * @type {string || null}
         */
        this.Clients = null;

        /**
         * Current system time.
         * @type {string || null}
         */
        this.CurrentTime = null;

        /**
         * Indicates whether it is for federation. 1: Yes, 0: No.
         * @type {number || null}
         */
        this.IsFederation = null;

        /**
         * Device name.
         * @type {string || null}
         */
        this.DeviceName = null;

        /**
         * Service.
         * @type {string || null}
         */
        this.ServiceClient = null;

        /**
         * Whether instance protection is enabled. True: enabled, false: disabled.
         * @type {boolean || null}
         */
        this.DisableApiTermination = null;

        /**
         * 0: old billing, 1: new billing.
         * @type {number || null}
         */
        this.TradeVersion = null;

        /**
         * Component status. ZooKeeper: STARTED, ResourceManager: STARTED, STARTED: Component is running, STOPPED: Component is halted.
         * @type {string || null}
         */
        this.ServicesStatus = null;

        /**
         * Remarks.
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Shared cluster ID.
         * @type {string || null}
         */
        this.SharedClusterId = null;

        /**
         * Shared cluster ID description.
         * @type {string || null}
         */
        this.SharedClusterIdDesc = null;

        /**
         * Whether the resource is set for scheduled termination.
         * @type {boolean || null}
         */
        this.TimingResource = null;

        /**
         * Corresponding TKE cluster ID in the case that the resource type (HardwareResourceType) is pod.
         * @type {string || null}
         */
        this.TkeClusterId = null;

        /**
         * Name list of services that can be configured when a new disk is mounted.
         * @type {Array.<string> || null}
         */
        this.ConfigurableServices = null;

        /**
         * Node labeling information: currently used only in the Terraform.
         * @type {string || null}
         */
        this.NodeMark = null;

        /**
         * Whether auto-renewal is available for committed use resources.
         * @type {boolean || null}
         */
        this.UnderwriteSetAutoRenew = null;

        /**
         * GPU information.
         * @type {string || null}
         */
        this.GpuDesc = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AppId = 'AppId' in params ? params.AppId : null;
        this.SerialNo = 'SerialNo' in params ? params.SerialNo : null;
        this.OrderNo = 'OrderNo' in params ? params.OrderNo : null;
        this.WanIp = 'WanIp' in params ? params.WanIp : null;
        this.Flag = 'Flag' in params ? params.Flag : null;
        this.Spec = 'Spec' in params ? params.Spec : null;
        this.CpuNum = 'CpuNum' in params ? params.CpuNum : null;
        this.MemSize = 'MemSize' in params ? params.MemSize : null;
        this.MemDesc = 'MemDesc' in params ? params.MemDesc : null;
        this.RegionId = 'RegionId' in params ? params.RegionId : null;
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.ApplyTime = 'ApplyTime' in params ? params.ApplyTime : null;
        this.FreeTime = 'FreeTime' in params ? params.FreeTime : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.NameTag = 'NameTag' in params ? params.NameTag : null;
        this.Services = 'Services' in params ? params.Services : null;
        this.StorageType = 'StorageType' in params ? params.StorageType : null;
        this.RootSize = 'RootSize' in params ? params.RootSize : null;
        this.ChargeType = 'ChargeType' in params ? params.ChargeType : null;
        this.CdbIp = 'CdbIp' in params ? params.CdbIp : null;
        this.CdbPort = 'CdbPort' in params ? params.CdbPort : null;
        this.HwDiskSize = 'HwDiskSize' in params ? params.HwDiskSize : null;
        this.HwDiskSizeDesc = 'HwDiskSizeDesc' in params ? params.HwDiskSizeDesc : null;
        this.HwMemSize = 'HwMemSize' in params ? params.HwMemSize : null;
        this.HwMemSizeDesc = 'HwMemSizeDesc' in params ? params.HwMemSizeDesc : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.EmrResourceId = 'EmrResourceId' in params ? params.EmrResourceId : null;
        this.IsAutoRenew = 'IsAutoRenew' in params ? params.IsAutoRenew : null;
        this.DeviceClass = 'DeviceClass' in params ? params.DeviceClass : null;
        this.Mutable = 'Mutable' in params ? params.Mutable : null;

        if (params.MCMultiDisk) {
            this.MCMultiDisk = new Array();
            for (let z in params.MCMultiDisk) {
                let obj = new MultiDiskMC();
                obj.deserialize(params.MCMultiDisk[z]);
                this.MCMultiDisk.push(obj);
            }
        }

        if (params.CdbNodeInfo) {
            let obj = new CdbInfo();
            obj.deserialize(params.CdbNodeInfo)
            this.CdbNodeInfo = obj;
        }
        this.Ip = 'Ip' in params ? params.Ip : null;
        this.Destroyable = 'Destroyable' in params ? params.Destroyable : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.AutoFlag = 'AutoFlag' in params ? params.AutoFlag : null;
        this.HardwareResourceType = 'HardwareResourceType' in params ? params.HardwareResourceType : null;
        this.IsDynamicSpec = 'IsDynamicSpec' in params ? params.IsDynamicSpec : null;
        this.DynamicPodSpec = 'DynamicPodSpec' in params ? params.DynamicPodSpec : null;
        this.SupportModifyPayMode = 'SupportModifyPayMode' in params ? params.SupportModifyPayMode : null;
        this.RootStorageType = 'RootStorageType' in params ? params.RootStorageType : null;
        this.Zone = 'Zone' in params ? params.Zone : null;

        if (params.SubnetInfo) {
            let obj = new SubnetInfo();
            obj.deserialize(params.SubnetInfo)
            this.SubnetInfo = obj;
        }
        this.Clients = 'Clients' in params ? params.Clients : null;
        this.CurrentTime = 'CurrentTime' in params ? params.CurrentTime : null;
        this.IsFederation = 'IsFederation' in params ? params.IsFederation : null;
        this.DeviceName = 'DeviceName' in params ? params.DeviceName : null;
        this.ServiceClient = 'ServiceClient' in params ? params.ServiceClient : null;
        this.DisableApiTermination = 'DisableApiTermination' in params ? params.DisableApiTermination : null;
        this.TradeVersion = 'TradeVersion' in params ? params.TradeVersion : null;
        this.ServicesStatus = 'ServicesStatus' in params ? params.ServicesStatus : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.SharedClusterId = 'SharedClusterId' in params ? params.SharedClusterId : null;
        this.SharedClusterIdDesc = 'SharedClusterIdDesc' in params ? params.SharedClusterIdDesc : null;
        this.TimingResource = 'TimingResource' in params ? params.TimingResource : null;
        this.TkeClusterId = 'TkeClusterId' in params ? params.TkeClusterId : null;
        this.ConfigurableServices = 'ConfigurableServices' in params ? params.ConfigurableServices : null;
        this.NodeMark = 'NodeMark' in params ? params.NodeMark : null;
        this.UnderwriteSetAutoRenew = 'UnderwriteSetAutoRenew' in params ? params.UnderwriteSetAutoRenew : null;
        this.GpuDesc = 'GpuDesc' in params ? params.GpuDesc : null;

    }
}

/**
 * The services to operate on
 * @class
 */
class ServiceBasicRestartInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * The service name (required), such as HDFS.
         * @type {string || null}
         */
        this.ServiceName = null;

        /**
         * If it is left empty, all processes will be operated on.
         * @type {Array.<ComponentBasicRestartInfo> || null}
         */
        this.ComponentInfoList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceName = 'ServiceName' in params ? params.ServiceName : null;

        if (params.ComponentInfoList) {
            this.ComponentInfoList = new Array();
            for (let z in params.ComponentInfoList) {
                let obj = new ComponentBasicRestartInfo();
                obj.deserialize(params.ComponentInfoList[z]);
                this.ComponentInfoList.push(obj);
            }
        }

    }
}

/**
 * DescribeAutoScaleRecords request structure.
 * @class
 */
class DescribeAutoScaleRecordsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Record filter parameter, which can only be "StartTime", "EndTime", "StrategyName", "ActionStatus", or "ScaleAction".
Time format. Either 2006-01-02 15:04:05 or 2006/01/02 15:04:05 for StartTime and EndTime.
ActionStatus: 0 (INITED), 1 (SUCCESS), 2 (FAILED), 3 (LIMITED_SUCCESSED), 4 (IN_PROCESS), 5 (IN_RETRY).
ScaleAction: 1 (scale out), 2 (scale in).

         * @type {Array.<KeyValue> || null}
         */
        this.Filters = null;

        /**
         * Pagination parameters.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Pagination parameters. Maximum value: 100
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Whether it is automatic scaling (0) or managed scaling (1)
         * @type {number || null}
         */
        this.RecordSource = null;

        /**
         * Ascending or not. 1: ascending, 0: descending.
         * @type {number || null}
         */
        this.Asc = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new KeyValue();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.RecordSource = 'RecordSource' in params ? params.RecordSource : null;
        this.Asc = 'Asc' in params ? params.Asc : null;

    }
}

/**
 * TerminateClusterNodes request structure.
 * @class
 */
class TerminateClusterNodesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The list of resources to be terminated.
         * @type {Array.<string> || null}
         */
        this.CvmInstanceIds = null;

        /**
         * Valid values of node type:
  <li>MASTER</li>
  <li>TASK</li>
  <li>CORE</li>
  <li>ROUTER</li>
         * @type {string || null}
         */
        this.NodeFlag = null;

        /**
         * The graceful scale-in feature. Valid values:
  <li>`true`: Enabled.</li>
  <li>`false`: Disabled.</li>
         * @type {boolean || null}
         */
        this.GraceDownFlag = null;

        /**
         * The graceful scale-in wait time in seconds. Value range: 60–1800.
         * @type {number || null}
         */
        this.GraceDownTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.CvmInstanceIds = 'CvmInstanceIds' in params ? params.CvmInstanceIds : null;
        this.NodeFlag = 'NodeFlag' in params ? params.NodeFlag : null;
        this.GraceDownFlag = 'GraceDownFlag' in params ? params.GraceDownFlag : null;
        this.GraceDownTime = 'GraceDownTime' in params ? params.GraceDownTime : null;

    }
}

/**
 * Custom query filter of the EMR cluster instance list
 * @class
 */
class Filters extends  AbstractModel {
    constructor(){
        super();

        /**
         * Field name
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Filters by the field value
         * @type {Array.<string> || null}
         */
        this.Values = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Values = 'Values' in params ? params.Values : null;

    }
}

/**
 * ModifyUsersOfGroupSTD request structure.
 * @class
 */
class ModifyUsersOfGroupSTDRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster name.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * User group name.
         * @type {string || null}
         */
        this.Group = null;

        /**
         * User list.
         * @type {Array.<string> || null}
         */
        this.Users = null;

        /**
         * User group description.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Enumeration class. Valid values: ADD, DELETE, SYNC.


Enumeration class description.
- ADD: Batched users to add. Adding the same user multiple times will not trigger an error.
- DELETE: Batched users to remove from the user group. Deleting non-existing users will not trigger an error.
- SYNC: Overwrites the entire user group. An empty list clears all existing members.
Defaults to SYNC.

         * @type {string || null}
         */
        this.OperateAction = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Group = 'Group' in params ? params.Group : null;
        this.Users = 'Users' in params ? params.Users : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.OperateAction = 'OperateAction' in params ? params.OperateAction : null;

    }
}

/**
 * Elastic scaling specification configuration
 * @class
 */
class AutoScaleResourceConf extends  AbstractModel {
    constructor(){
        super();

        /**
         * Configuration ID.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Cluster instance ID.
         * @type {number || null}
         */
        this.ClusterId = null;

        /**
         * Minimum number of instances retained for automatic scaling
         * @type {number || null}
         */
        this.ScaleLowerBound = null;

        /**
         * Maximum number of instances for auto scaling
         * @type {number || null}
         */
        this.ScaleUpperBound = null;

        /**
         * Scale-out rule type. 1: load-based scale-out rule, 2: time-based scale-out rule
         * @type {number || null}
         */
        this.StrategyType = null;

        /**
         * Next scale-out time.
         * @type {number || null}
         */
        this.NextTimeCanScale = null;

        /**
         * Graceful scale-in switch.
         * @type {boolean || null}
         */
        this.GraceDownFlag = null;

        /**
         * "CVM" indicates that the CVM type is used for all specifications, and "Pod" indicates that the container type is used for specifications. The default value is "CVM".
         * @type {string || null}
         */
        this.HardwareType = null;

        /**
         * "POSTPAY" indicates the sole adoption of pay-as-you-go, and "SPOT_FIRST" indicates spot instance first, which is only supported when HardwareType is "HOST". "Pod" only supports pay-as-you-go.
         * @type {string || null}
         */
        this.PayMode = null;

        /**
         * The minimum percentage of pay-as-you-go resources in scenarios with spot instance first. It is an integer.
         * @type {number || null}
         */
        this.PostPayPercentMin = null;

        /**
         * When resource type is preset to HOST: Supports enabling/disabling "Fallback to pod when resources are insufficient"; Default state: 0 (disabled), Toggle state: 1 (enabled).
         * @type {number || null}
         */
        this.ChangeToPod = null;

        /**
         * Scaling group name.
         * @type {string || null}
         */
        this.GroupName = null;

        /**
         * Tag.
         * @type {string || null}
         */
        this.YarnNodeLabel = null;

        /**
         * Scaling group status.
         * @type {number || null}
         */
        this.GroupStatus = null;

        /**
         * Parallel scaling. 0: disabled; 1: enabled.
         * @type {number || null}
         */
        this.Parallel = null;

        /**
         * Whether MNode is supported.
         * @type {number || null}
         */
        this.EnableMNode = null;

        /**
         * More scaling group settings.
         * @type {AutoScaleGroupAdvanceAttrs || null}
         */
        this.ExtraAdvanceAttrs = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.ClusterId = 'ClusterId' in params ? params.ClusterId : null;
        this.ScaleLowerBound = 'ScaleLowerBound' in params ? params.ScaleLowerBound : null;
        this.ScaleUpperBound = 'ScaleUpperBound' in params ? params.ScaleUpperBound : null;
        this.StrategyType = 'StrategyType' in params ? params.StrategyType : null;
        this.NextTimeCanScale = 'NextTimeCanScale' in params ? params.NextTimeCanScale : null;
        this.GraceDownFlag = 'GraceDownFlag' in params ? params.GraceDownFlag : null;
        this.HardwareType = 'HardwareType' in params ? params.HardwareType : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.PostPayPercentMin = 'PostPayPercentMin' in params ? params.PostPayPercentMin : null;
        this.ChangeToPod = 'ChangeToPod' in params ? params.ChangeToPod : null;
        this.GroupName = 'GroupName' in params ? params.GroupName : null;
        this.YarnNodeLabel = 'YarnNodeLabel' in params ? params.YarnNodeLabel : null;
        this.GroupStatus = 'GroupStatus' in params ? params.GroupStatus : null;
        this.Parallel = 'Parallel' in params ? params.Parallel : null;
        this.EnableMNode = 'EnableMNode' in params ? params.EnableMNode : null;

        if (params.ExtraAdvanceAttrs) {
            let obj = new AutoScaleGroupAdvanceAttrs();
            obj.deserialize(params.ExtraAdvanceAttrs)
            this.ExtraAdvanceAttrs = obj;
        }

    }
}

/**
 * Instance prepayment parameter. This parameter is valid only when the payment type is PREPAID.
 * @class
 */
class InstanceChargePrepaid extends  AbstractModel {
    constructor(){
        super();

        /**
         * The period of monthly subscription, which defaults to 1 and is expressed in month.
Valid values: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36, 48, 60.
         * @type {number || null}
         */
        this.Period = null;

        /**
         * Whether to enable auto-renewal. Valid values:
<li>`true`: Enable</li>
<li>`false` (default): Disable</li>
         * @type {boolean || null}
         */
        this.RenewFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Period = 'Period' in params ? params.Period : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;

    }
}

/**
 * DescribeGlobalConfig request structure.
 * @class
 */
class DescribeGlobalConfigRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * English ID of the EMR cluster.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * Output parameters of the DescribeResourceConfig API.
 * @class
 */
class DescribeResourceConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specification management type.
         * @type {string || null}
         */
        this.ResourceType = null;

        /**
         * Specification management data.
         * @type {Array.<NodeResource> || null}
         */
        this.ResourceData = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;

        if (params.ResourceData) {
            this.ResourceData = new Array();
            for (let z in params.ResourceData) {
                let obj = new NodeResource();
                obj.deserialize(params.ResourceData[z]);
                this.ResourceData.push(obj);
            }
        }

    }
}

module.exports = {
    AddNodeResourceConfigRequest: AddNodeResourceConfigRequest,
    DescribeSparkApplicationsResponse: DescribeSparkApplicationsResponse,
    ModifyResourceResponse: ModifyResourceResponse,
    ZoneSetting: ZoneSetting,
    PodSpecInfo: PodSpecInfo,
    DescribeHBaseTableOverviewRequest: DescribeHBaseTableOverviewRequest,
    ScaleOutInstanceResponse: ScaleOutInstanceResponse,
    UserManagerUserBriefInfo: UserManagerUserBriefInfo,
    DescribeClusterFlowStatusDetailResponse: DescribeClusterFlowStatusDetailResponse,
    SchedulerTaskInfo: SchedulerTaskInfo,
    DynamicPodSpec: DynamicPodSpec,
    DescribeHDFSStorageInfoResponse: DescribeHDFSStorageInfoResponse,
    ModifyUserManagerPwdResponse: ModifyUserManagerPwdResponse,
    DescribeHiveQueriesRequest: DescribeHiveQueriesRequest,
    CreateInstanceResponse: CreateInstanceResponse,
    PersistentVolumeContext: PersistentVolumeContext,
    CreateGroupsSTDResponse: CreateGroupsSTDResponse,
    DescribeNodeSpec: DescribeNodeSpec,
    Arg: Arg,
    HostVolumeContext: HostVolumeContext,
    DescribeServiceNodeInfosRequest: DescribeServiceNodeInfosRequest,
    DiskSpecInfo: DiskSpecInfo,
    HiveQuery: HiveQuery,
    FairGlobalConfig: FairGlobalConfig,
    NodeSpecFamily: NodeSpecFamily,
    KeyValue: KeyValue,
    DescribeServiceNodeInfosResponse: DescribeServiceNodeInfosResponse,
    EmrProductConfigDetail: EmrProductConfigDetail,
    DescribeInstancesResponse: DescribeInstancesResponse,
    DescribeTrinoQueryInfoResponse: DescribeTrinoQueryInfoResponse,
    PriceResult: PriceResult,
    TrinoQueryInfo: TrinoQueryInfo,
    WeekRepeatStrategy: WeekRepeatStrategy,
    SparkQuery: SparkQuery,
    Dps: Dps,
    TerminateTasksResponse: TerminateTasksResponse,
    DeleteAutoScaleStrategyResponse: DeleteAutoScaleStrategyResponse,
    DescribeNodeSpecRequest: DescribeNodeSpecRequest,
    ModifySLInstanceBasicRequest: ModifySLInstanceBasicRequest,
    SLInstanceInfo: SLInstanceInfo,
    DefaultSetting: DefaultSetting,
    COSSettings: COSSettings,
    ClusterInstancesInfo: ClusterInstancesInfo,
    ModifyResourcesTagsResponse: ModifyResourcesTagsResponse,
    CreateSLInstanceRequest: CreateSLInstanceRequest,
    ScaleOutInstanceRequest: ScaleOutInstanceRequest,
    ResetYarnConfigRequest: ResetYarnConfigRequest,
    KyuubiQueryInfo: KyuubiQueryInfo,
    ComputeResourceAdvanceParams: ComputeResourceAdvanceParams,
    DescribeHBaseTableOverviewResponse: DescribeHBaseTableOverviewResponse,
    DescribeAutoScaleGroupGlobalConfRequest: DescribeAutoScaleGroupGlobalConfRequest,
    ModifyAutoScaleStrategyRequest: ModifyAutoScaleStrategyRequest,
    AttachDisksRequest: AttachDisksRequest,
    DescribeSparkQueriesRequest: DescribeSparkQueriesRequest,
    NodeSpecInstanceType: NodeSpecInstanceType,
    DescribeGroupsSTDRequest: DescribeGroupsSTDRequest,
    ModifyResourceScheduleConfigResponse: ModifyResourceScheduleConfigResponse,
    InsightResult: InsightResult,
    NodeDetailPriceResult: NodeDetailPriceResult,
    PriceResource: PriceResource,
    Tag: Tag,
    DescribeKyuubiQueryInfoResponse: DescribeKyuubiQueryInfoResponse,
    TerminateSLInstanceRequest: TerminateSLInstanceRequest,
    ConvertPreToPostClusterResponse: ConvertPreToPostClusterResponse,
    ClusterIDToFlowID: ClusterIDToFlowID,
    EmrListInstance: EmrListInstance,
    InquiryPriceScaleOutInstanceRequest: InquiryPriceScaleOutInstanceRequest,
    ZoneDetailPriceResult: ZoneDetailPriceResult,
    AddUsersForUserManagerResponse: AddUsersForUserManagerResponse,
    SearchItem: SearchItem,
    DescribeResourceScheduleDiffDetailResponse: DescribeResourceScheduleDiffDetailResponse,
    DescribeYarnQueueResponse: DescribeYarnQueueResponse,
    TopologyInfo: TopologyInfo,
    SchedulerTaskDetail: SchedulerTaskDetail,
    ModifyUserGroupRequest: ModifyUserGroupRequest,
    NodeResourceSpec: NodeResourceSpec,
    AddMetricScaleStrategyRequest: AddMetricScaleStrategyRequest,
    DeleteNodeResourceConfigRequest: DeleteNodeResourceConfigRequest,
    EmrProductConfigOutter: EmrProductConfigOutter,
    VPCSettings: VPCSettings,
    DiffHeader: DiffHeader,
    CreateGroupsSTDRequest: CreateGroupsSTDRequest,
    ConvertPreToPostClusterRequest: ConvertPreToPostClusterRequest,
    DescribeSparkQueriesResponse: DescribeSparkQueriesResponse,
    Placement: Placement,
    FlowParam: FlowParam,
    DescribeAutoScaleStrategiesResponse: DescribeAutoScaleStrategiesResponse,
    DescribeNodeDataDisksRequest: DescribeNodeDataDisksRequest,
    StopParams: StopParams,
    DependService: DependService,
    DescribeInspectionTaskResultRequest: DescribeInspectionTaskResultRequest,
    InquiryPriceRenewInstanceResponse: InquiryPriceRenewInstanceResponse,
    InquiryPriceCreateInstanceResponse: InquiryPriceCreateInstanceResponse,
    SubnetInfo: SubnetInfo,
    StartStopServiceOrMonitorRequest: StartStopServiceOrMonitorRequest,
    StarRocksQueryInfo: StarRocksQueryInfo,
    DescribeHDFSStorageInfoRequest: DescribeHDFSStorageInfoRequest,
    OverviewMetricData: OverviewMetricData,
    ModifyYarnDeployResponse: ModifyYarnDeployResponse,
    AutoScaleRecord: AutoScaleRecord,
    LoadAutoScaleStrategy: LoadAutoScaleStrategy,
    HealthStatus: HealthStatus,
    DescribeSparkApplicationsRequest: DescribeSparkApplicationsRequest,
    FlowParamsDesc: FlowParamsDesc,
    DescribeResourceScheduleRequest: DescribeResourceScheduleRequest,
    PodParameter: PodParameter,
    InspectionTaskSettings: InspectionTaskSettings,
    TerminateInstanceRequest: TerminateInstanceRequest,
    AllNodeResourceSpec: AllNodeResourceSpec,
    GroupInfo: GroupInfo,
    DescribeGlobalConfigResponse: DescribeGlobalConfigResponse,
    ModifyYarnDeployRequest: ModifyYarnDeployRequest,
    DeleteNodeResourceConfigResponse: DeleteNodeResourceConfigResponse,
    DescribeClusterFlowStatusDetailRequest: DescribeClusterFlowStatusDetailRequest,
    DescribeUsersForUserManagerRequest: DescribeUsersForUserManagerRequest,
    TerminateClusterNodesResponse: TerminateClusterNodesResponse,
    DescribeDAGInfoResponse: DescribeDAGInfoResponse,
    Taint: Taint,
    DiffDetail: DiffDetail,
    DescribeInsightListRequest: DescribeInsightListRequest,
    DescribeSLInstanceListRequest: DescribeSLInstanceListRequest,
    StartStopServiceOrMonitorResponse: StartStopServiceOrMonitorResponse,
    DescribeHiveQueriesResponse: DescribeHiveQueriesResponse,
    ResizeDataDisksResponse: ResizeDataDisksResponse,
    DescribeYarnQueueRequest: DescribeYarnQueueRequest,
    ConfigSetInfo: ConfigSetInfo,
    ModifyResourceRequest: ModifyResourceRequest,
    PreExecuteFileSettings: PreExecuteFileSettings,
    TerminateTasksRequest: TerminateTasksRequest,
    ModifyAutoRenewFlagResponse: ModifyAutoRenewFlagResponse,
    ServiceNodeDetailInfo: ServiceNodeDetailInfo,
    ScaleOutServiceConfGroupsInfo: ScaleOutServiceConfGroupsInfo,
    CreateSLInstanceResponse: CreateSLInstanceResponse,
    NodeSpecType: NodeSpecType,
    DescribeYarnScheduleHistoryResponse: DescribeYarnScheduleHistoryResponse,
    DescribeDAGInfoRequest: DescribeDAGInfoRequest,
    DescribeAutoScaleGroupGlobalConfResponse: DescribeAutoScaleGroupGlobalConfResponse,
    Resource: Resource,
    DescribeEmrApplicationStaticsRequest: DescribeEmrApplicationStaticsRequest,
    SLInstance: SLInstance,
    DescribeClusterNodesResponse: DescribeClusterNodesResponse,
    TerminateInstanceResponse: TerminateInstanceResponse,
    DescribeYarnScheduleHistoryRequest: DescribeYarnScheduleHistoryRequest,
    NewResourceSpec: NewResourceSpec,
    ModifyYarnQueueV2Response: ModifyYarnQueueV2Response,
    ScaleOutNodeConfig: ScaleOutNodeConfig,
    ModifyResourceTags: ModifyResourceTags,
    SetNodeResourceConfigDefaultResponse: SetNodeResourceConfigDefaultResponse,
    PodVolume: PodVolume,
    NodeMark: NodeMark,
    DescribeResourceScheduleResponse: DescribeResourceScheduleResponse,
    UserManagerFilter: UserManagerFilter,
    MultiDisk: MultiDisk,
    NodeRenewPriceDetail: NodeRenewPriceDetail,
    PriceDetail: PriceDetail,
    TriggerCondition: TriggerCondition,
    TaskSettings: TaskSettings,
    MetricTags: MetricTags,
    NodeSpecDisk: NodeSpecDisk,
    OverviewRow: OverviewRow,
    RenewPriceDetail: RenewPriceDetail,
    ModifyResourceSchedulerRequest: ModifyResourceSchedulerRequest,
    TableSchemaItem: TableSchemaItem,
    LoginSettings: LoginSettings,
    ModifyInspectionSettingsResponse: ModifyInspectionSettingsResponse,
    DescribeKyuubiQueryInfoRequest: DescribeKyuubiQueryInfoRequest,
    MonthRepeatStrategy: MonthRepeatStrategy,
    ModifyGlobalConfigResponse: ModifyGlobalConfigResponse,
    DescribeNodeResourceConfigFastResponse: DescribeNodeResourceConfigFastResponse,
    TimeAutoScaleStrategy: TimeAutoScaleStrategy,
    ModifySLInstanceRequest: ModifySLInstanceRequest,
    DescribeInsightListResponse: DescribeInsightListResponse,
    CustomServiceDefine: CustomServiceDefine,
    ResultItem: ResultItem,
    StageInfoDetail: StageInfoDetail,
    CreateClusterResponse: CreateClusterResponse,
    DescribeAutoScaleRecordsResponse: DescribeAutoScaleRecordsResponse,
    ModifyYarnQueueV2Request: ModifyYarnQueueV2Request,
    ModifyUserGroupResponse: ModifyUserGroupResponse,
    DAGInfo: DAGInfo,
    CreateClusterRequest: CreateClusterRequest,
    AddMetricScaleStrategyResponse: AddMetricScaleStrategyResponse,
    DeleteGroupsSTDResponse: DeleteGroupsSTDResponse,
    DescribeNodeResourceConfigFastRequest: DescribeNodeResourceConfigFastRequest,
    NodeResource: NodeResource,
    GroupGlobalConfs: GroupGlobalConfs,
    Order: Order,
    DescribeInspectionTaskResultResponse: DescribeInspectionTaskResultResponse,
    DescribeClusterNodesRequest: DescribeClusterNodesRequest,
    ComponentBasicRestartInfo: ComponentBasicRestartInfo,
    CreateInstanceRequest: CreateInstanceRequest,
    ScaleOutClusterRequest: ScaleOutClusterRequest,
    DiffDetailItem: DiffDetailItem,
    AutoScaleGroupAdvanceAttrs: AutoScaleGroupAdvanceAttrs,
    DescribeSLInstanceListResponse: DescribeSLInstanceListResponse,
    UpdateInstanceSettings: UpdateInstanceSettings,
    DescribeEmrOverviewMetricsResponse: DescribeEmrOverviewMetricsResponse,
    DescribeServiceConfGroupInfosRequest: DescribeServiceConfGroupInfosRequest,
    ClusterRelationMeta: ClusterRelationMeta,
    CapacityGlobalConfig: CapacityGlobalConfig,
    DescribeInstancesRequest: DescribeInstancesRequest,
    NotRepeatStrategy: NotRepeatStrategy,
    TerminateSLInstanceResponse: TerminateSLInstanceResponse,
    PodNewSpec: PodNewSpec,
    InquiryPriceUpdateInstanceRequest: InquiryPriceUpdateInstanceRequest,
    DescribeAutoScaleStrategiesRequest: DescribeAutoScaleStrategiesRequest,
    DeployYarnConfRequest: DeployYarnConfRequest,
    DescribeGroupsSTDResponse: DescribeGroupsSTDResponse,
    DescribeNodeDataDisksResponse: DescribeNodeDataDisksResponse,
    DescribeInstancesListRequest: DescribeInstancesListRequest,
    ItemSeq: ItemSeq,
    RepeatStrategy: RepeatStrategy,
    AttachDisksResponse: AttachDisksResponse,
    OutterResource: OutterResource,
    OpScope: OpScope,
    ResizeDataDisksRequest: ResizeDataDisksRequest,
    DeleteAutoScaleStrategyRequest: DeleteAutoScaleStrategyRequest,
    NodeSpecDiskV2: NodeSpecDiskV2,
    DeployYarnConfResponse: DeployYarnConfResponse,
    DescribeInstancesListResponse: DescribeInstancesListResponse,
    SetNodeResourceConfigDefaultRequest: SetNodeResourceConfigDefaultRequest,
    Period: Period,
    DayRepeatStrategy: DayRepeatStrategy,
    ModifyInstanceBasicRequest: ModifyInstanceBasicRequest,
    DescribeUsersForUserManagerResponse: DescribeUsersForUserManagerResponse,
    DescribeResourceScheduleDiffDetailRequest: DescribeResourceScheduleDiffDetailRequest,
    ResetYarnConfigResponse: ResetYarnConfigResponse,
    FlowExtraDetail: FlowExtraDetail,
    InquiryPriceRenewInstanceRequest: InquiryPriceRenewInstanceRequest,
    CdbInfo: CdbInfo,
    ModifyResourcesTagsRequest: ModifyResourcesTagsRequest,
    MultiDiskMC: MultiDiskMC,
    AddUsersForUserManagerRequest: AddUsersForUserManagerRequest,
    ZoneResourceConfiguration: ZoneResourceConfiguration,
    StorageSummaryDistribution: StorageSummaryDistribution,
    DescribeSLInstanceRequest: DescribeSLInstanceRequest,
    CustomMetaInfo: CustomMetaInfo,
    ApplicationStatics: ApplicationStatics,
    ConfigurationItem: ConfigurationItem,
    DeleteGroupsSTDRequest: DeleteGroupsSTDRequest,
    InquiryPriceCreateInstanceRequest: InquiryPriceCreateInstanceRequest,
    DescribeSLInstanceResponse: DescribeSLInstanceResponse,
    MultiZoneSetting: MultiZoneSetting,
    ModifyAutoRenewFlagRequest: ModifyAutoRenewFlagRequest,
    AddNodeResourceConfigResponse: AddNodeResourceConfigResponse,
    CBSInstance: CBSInstance,
    ModifyResourceScheduleConfigRequest: ModifyResourceScheduleConfigRequest,
    UserInfoForUserManager: UserInfoForUserManager,
    ScriptBootstrapActionConfig: ScriptBootstrapActionConfig,
    TkeLabel: TkeLabel,
    PrePaySetting: PrePaySetting,
    PodNewParameter: PodNewParameter,
    DescribeEmrOverviewMetricsRequest: DescribeEmrOverviewMetricsRequest,
    ScaleOutClusterResponse: ScaleOutClusterResponse,
    ServiceProcessFunctionInfo: ServiceProcessFunctionInfo,
    PartDetailPriceItem: PartDetailPriceItem,
    ExternalService: ExternalService,
    RestartPolicy: RestartPolicy,
    InquiryPriceUpdateInstanceResponse: InquiryPriceUpdateInstanceResponse,
    DescribeServiceConfGroupInfosResponse: DescribeServiceConfGroupInfosResponse,
    ClusterExternalServiceInfo: ClusterExternalServiceInfo,
    ModifyUsersOfGroupSTDResponse: ModifyUsersOfGroupSTDResponse,
    SoftDependInfo: SoftDependInfo,
    ModifyAutoScaleStrategyResponse: ModifyAutoScaleStrategyResponse,
    DescribeNodeSpecResponse: DescribeNodeSpecResponse,
    DescribeStarRocksQueryInfoRequest: DescribeStarRocksQueryInfoRequest,
    ModifySLInstanceResponse: ModifySLInstanceResponse,
    LoadMetricsConditions: LoadMetricsConditions,
    ModifyGlobalConfigRequest: ModifyGlobalConfigRequest,
    DescribeEmrApplicationStaticsResponse: DescribeEmrApplicationStaticsResponse,
    ResourceDetail: ResourceDetail,
    LoadMetricsCondition: LoadMetricsCondition,
    CustomMetaDBInfo: CustomMetaDBInfo,
    Item: Item,
    PodSpec: PodSpec,
    ModifySLInstanceBasicResponse: ModifySLInstanceBasicResponse,
    DescribeStarRocksQueryInfoResponse: DescribeStarRocksQueryInfoResponse,
    SparkApplicationsList: SparkApplicationsList,
    ConfigModifyInfoV2: ConfigModifyInfoV2,
    ModifyUserManagerPwdRequest: ModifyUserManagerPwdRequest,
    InquiryPriceScaleOutInstanceResponse: InquiryPriceScaleOutInstanceResponse,
    ModifyInstanceBasicResponse: ModifyInstanceBasicResponse,
    GroupInfos: GroupInfos,
    ModifyResourceSchedulerResponse: ModifyResourceSchedulerResponse,
    Filter: Filter,
    VirtualPrivateCloud: VirtualPrivateCloud,
    StrategyConfig: StrategyConfig,
    SceneSoftwareConfig: SceneSoftwareConfig,
    ShortNodeInfo: ShortNodeInfo,
    DescribeTrinoQueryInfoRequest: DescribeTrinoQueryInfoRequest,
    EmrPrice: EmrPrice,
    ModifyInspectionSettingsRequest: ModifyInspectionSettingsRequest,
    NodeHardwareInfo: NodeHardwareInfo,
    ServiceBasicRestartInfo: ServiceBasicRestartInfo,
    DescribeAutoScaleRecordsRequest: DescribeAutoScaleRecordsRequest,
    TerminateClusterNodesRequest: TerminateClusterNodesRequest,
    Filters: Filters,
    ModifyUsersOfGroupSTDRequest: ModifyUsersOfGroupSTDRequest,
    AutoScaleResourceConf: AutoScaleResourceConf,
    InstanceChargePrepaid: InstanceChargePrepaid,
    DescribeGlobalConfigRequest: DescribeGlobalConfigRequest,
    DescribeResourceConfig: DescribeResourceConfig,

}
